source: trunk/src/libsrc/winnt/sendmail.c @ 1244

Revision 1244, 7.0 KB checked in by kohler, 17 years ago (diff)

Increased BUFFSIZE from 200 to 250 in define statment.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1
2/*
3 *   THIS FILE IS UNDER RCS - DO NOT MODIFY UNLESS YOU HAVE
4 *   CHECKED IT OUT USING THE COMMAND CHECKOUT.
5 *
6 *    $Id$
7 *
8 *    Revision history:
9 *     $Log$
10 *     Revision 1.5  2003/06/11 19:13:14  kohler
11 *     Increased BUFFSIZE from 200 to 250 in define statment.
12 *
13 *     Revision 1.4  2002/09/30 19:34:52  alex
14 *     changed 'printf' to 'logit'
15 *     Alex
16 *
17 *     Revision 1.3  2001/10/02 18:15:18  dietz
18 *     Changed to use COMPUTERNAME in the email sender field
19 *     instead of Earthworm.
20 *
21 *     Revision 1.2  2000/05/23 18:05:31  dietz
22 *     Changed blat sender to root@<MailHost>
23 *
24 *     Revision 1.1  2000/02/14 18:53:30  lucky
25 *     Initial revision
26 *
27 *
28 */
29
30     /*****************************************************************
31      *                            sendmail                           *
32      *                                                               *
33      *         Function to send email.  Windows NT version.          *
34      *                                                               *
35      *  This function requires a mail server computer.               *
36      *                                                               *
37      *  person:     List of email recipients                         *
38      *  nmail:      The number of recipients                         *
39      *  mailProg:   Mail program to use - for solaris compatibility  *
40      *  subject:    Subject of the message                           *
41      *  msg  :      The body of the email message                    *
42      *  msgPrefix : Prefix to the body of the message                *
43      *  msgSuffix : Suffix to the body of the message                *
44      *  mailServer: Computer that sends the mail message.            *
45      *                                                               *
46      *  Returns -1 if an error occurred, 0 otherwise                 *
47      *                                                               *
48      *  mailProg, subject, msgPrefix, and msgSuffix added by         *
49      *    Lucky Vidmar  Tue Jan 19 16:17:01 MST 1999                 *
50      *                                                               *
51      *****************************************************************/
52
53#include <string.h>
54#include <ctype.h>
55#include <stdio.h>
56#include <stdlib.h>
57#include <windows.h>
58#include <earthworm.h>
59
60#define BUFFSIZE 250
61
62static char *Sender = NULL;
63
64int SendMail( char person[][60], int nmail, char *mailProg, char *subject, 
65              char *msg, char *msgPrefix, char *msgSuffix, char *mailServer )
66{
67   FILE                *fp;
68   DWORD               pathSize;
69   char                tmp[BUFFSIZE];
70   char                pathBuffer[BUFFSIZE];
71   char                tempFilename[MAX_PATH];
72   char                commandLine[BUFFSIZE];
73   STARTUPINFO         startUpInfo;
74   BOOL                success;
75   DWORD               priorityClass;
76   PROCESS_INFORMATION procInfo;
77   DWORD               exitCode;
78   DWORD               rc;
79   int                 i;
80
81/* Check arguments
82   ***************/
83   if ( nmail < 1 )
84      return -1;
85
86/* Have Sender point to this computer's name
87   *****************************************/
88   if ( Sender == NULL )  Sender = getenv( "COMPUTERNAME" );
89
90/* Get the path of the temporary file directory
91   ********************************************/
92   pathSize = GetTempPath( BUFFSIZE, pathBuffer );
93   if ( pathSize < BUFFSIZE )
94      pathBuffer[pathSize] = 0;
95   else
96   {
97      logit("","Error getting path of temporary file directory." );
98      return -1;
99   }
100
101/* Create a unique file in the temporary file directory
102   ****************************************************/
103   if ( GetTempFileName( pathBuffer, "mai", 0, tempFilename ) == 0 )
104   {
105      logit("","Error getting name of temporary file.\n" );
106      return -1;
107   }
108
109/* Write the mail message to the temporary file
110   ********************************************/
111   fp = fopen( tempFilename, "w" );
112   if ( fp == NULL )
113   {
114      logit("","Error opening the temporary file.\n" );
115      return -1;
116   }
117 
118   if (msgPrefix != NULL)
119       fputs( msgPrefix, fp );
120
121   fputs( msg, fp );
122
123   if (msgSuffix != NULL)
124       fputs( msgSuffix, fp );
125
126   fclose( fp );
127
128/* Build a command line for the Blat program, which sends
129   the temporary file to the mail server computer.
130   ******************************************************/
131   strcpy( commandLine, "blat " );
132   strcat( commandLine, tempFilename );
133
134   if (subject != NULL)
135   {
136       sprintf ( tmp, " -s \"%s\"", subject );
137       strcat( commandLine, tmp );
138   }
139
140   strcat( commandLine, " -f root@" );
141   strcat( commandLine, mailServer );
142   strcat( commandLine, " -i " );
143   strcat( commandLine, Sender );
144   strcat( commandLine, " -server " );
145   strcat( commandLine, mailServer );
146   strcat( commandLine, " -t " );
147   strcat( commandLine, &person[0][0] );
148
149   for ( i = 1; i < nmail; i++ )
150   {
151      strcat( commandLine, "," );
152      strcat( commandLine, &person[i][0] );
153   }
154
155   /* logit("","sendmail command line:\n.%s.\n",commandLine); */
156
157/* Invoked the Blat program
158   ************************/
159   GetStartupInfo( &startUpInfo );
160
161   priorityClass = GetPriorityClass( GetCurrentProcess() );
162
163   success = CreateProcess( 0,
164                            commandLine,      /* Command line to invoke child */
165                            0, 0,                   /* No security attributes */
166                            FALSE,                    /* No inherited handles */
167                            0 |                /* Child does not get a window */
168                            priorityClass,      /* Same as priority of parent */
169                            0,              /* Not passing environmental vars */
170                            0,                  /* Current dir same as parent */
171                            &startUpInfo,     /* Attributes of process window */
172                            &procInfo );       /* Attributes of child process */
173   if ( !success )
174   {
175      logit("","Error starting Blat: %d\n", GetLastError() );
176      return -1;
177   }
178
179/* Wait 5 minutes for Blat to complete.
180   Check the process exit code for abnormal termination.
181   ****************************************************/
182   rc = WaitForSingleObject( procInfo.hProcess, 300000 );
183
184   if ( rc == WAIT_FAILED )
185   {
186      logit("","Blat WaitForSingleObject() failed with error: %d\n", GetLastError() );
187      return -1;
188   }
189   if ( rc == WAIT_TIMEOUT )
190   {
191      logit("","Error. Blat not completed within 5 minutes.\n" );
192      return -1;
193   }
194   success = GetExitCodeProcess( procInfo.hProcess, &exitCode );
195   if ( !success )
196   {
197      logit("","Error getting the Blat exit code: %d\n", GetLastError() );
198      return -1;
199   }
200   if ( exitCode != 0 )
201   {
202      logit("","Blat failed.\n" );
203      return -1;
204   }
205
206/* Delete the mail file
207   ********************/
208   success = DeleteFile( tempFilename );
209   if ( !success )
210   {
211      logit("","Error deleting temporary file: %s\n", tempFilename );
212      return -1;
213   }
214
215/* Everything went smoothly
216   ************************/
217   return 0;
218}
219
Note: See TracBrowser for help on using the repository browser.