00001
00002
00003
00004
00005
00006
00007
00008 #include "reGlobalsExtern.h"
00009 #include "icatHighLevelRoutines.h"
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 int msiSendMail(msParam_t* xtoAddr, msParam_t* xsubjectLine, msParam_t* xbody, ruleExecInfo_t *rei)
00047 {
00048 char *mailStr = 0;
00049 char fName[100];
00050 char *t1 = 0, *t2 = 0;
00051 FILE *fd = 0;
00052 char *toAddr = 0;
00053 char *subjectLine = 0;
00054 char *body = 0;
00055 int status = 0;
00056
00057 toAddr = (char *) xtoAddr->inOutStruct;
00058 subjectLine = (char *) xsubjectLine->inOutStruct;
00059 body = (char *) xbody->inOutStruct;
00060
00061 status = checkStringForEmailAddress(toAddr);
00062 if (status) return(status);
00063 status = checkStringForSystem(subjectLine);
00064 if (status) return(status);
00065
00066 if (reTestFlag > 0 ) {
00067 if (reTestFlag == COMMAND_TEST_1) {
00068 fprintf(stdout," Sending Email\n To:%s\n Subject:%s\n Body:%s\n",
00069 toAddr,subjectLine,body);
00070 }
00071 else if (reTestFlag == HTML_TEST_1) {
00072 fprintf(stdout,"Sending Email\n<UL>\n");
00073 fprintf(stdout,"<LI>To: %s\n",toAddr);
00074 fprintf(stdout,"<LI>subjectLine: %s\n",subjectLine);
00075 fprintf(stdout,"<LI>Body: %s\n",body);
00076 fprintf(stdout,"</UL>\n");
00077 }
00078 else if (reTestFlag == LOG_TEST_1)
00079 rodsLog (LOG_NOTICE," Calling msiSendMail To:%s Subject %s\n",
00080 toAddr,subjectLine);
00081 if (reLoopBackFlag > 0)
00082 return(0);
00083 }
00084 sprintf(fName,"mailFile%d.ml",getpid());
00085 fd = fopen(fName,"w");
00086 if (fd == NULL)
00087 return(FILE_CREATE_ERROR);
00088 t1 = body;
00089 #ifdef solaris_platform
00090 if (subjectLine != NULL && strlen(subjectLine) > 0)
00091 fprintf(fd,"Subject:%s\n\n",subjectLine);
00092 #endif
00093 while (t1 != NULL) {
00094 if ((t2 = strstr(t1,"\\n")) != NULL)
00095 *t2 = '\0';
00096 fprintf(fd,"%s\n",t1);
00097 if (t2 != NULL) {
00098 *t2 = '\\';
00099 t1 = t2+2;
00100 }
00101 else
00102 t1 = NULL;
00103 }
00104 fclose(fd);
00105 mailStr = (char*)malloc (strlen(toAddr)+strlen(subjectLine)+100);
00106 if (mailStr == NULL) return SYS_MALLOC_ERR;
00107
00108 #ifdef solaris_platform
00109 sprintf(mailStr,"cat %s| mail '%s'",fName,toAddr);
00110 #else
00111 if (subjectLine != NULL && strlen(subjectLine) > 0)
00112 sprintf(mailStr,"cat %s| mail -s '%s' '%s'",fName,subjectLine, toAddr);
00113 else
00114 sprintf(mailStr,"cat %s| mail '%s'",fName,toAddr);
00115 #endif
00116 system(mailStr);
00117 sprintf(mailStr,"rm %s",fName);
00118 system(mailStr);
00119 free(mailStr);
00120 return(0);
00121 }
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 int msiSendStdoutAsEmail(msParam_t* xtoAddr, msParam_t* xsubjectLine, ruleExecInfo_t *rei)
00159 {
00160 int i;
00161 msParam_t *mP;
00162 char tmpVarName[MAX_ACTION_SIZE];
00163 execCmdOut_t *myExecCmdOut;
00164 if ((mP = getMsParamByLabel (rei->msParamArray, "ruleExecOut")) == NULL)
00165 return(NO_VALUES_FOUND);
00166 myExecCmdOut = (execCmdOut_t*)mP->inOutStruct;
00167 getNewVarName(tmpVarName,rei->msParamArray);
00168 addMsParam(rei->msParamArray, tmpVarName, STR_MS_T,myExecCmdOut->stdoutBuf.buf , NULL);
00169 mP = getMsParamByLabel (rei->msParamArray, tmpVarName);
00170 i = msiSendMail(xtoAddr, xsubjectLine, mP, rei);
00171 rmMsParamByLabel (rei->msParamArray, tmpVarName,1);
00172 return(i);
00173
00174 }