source: trunk/src/libsrc/unix/sendmail.c @ 1878

Revision 1878, 3.4 KB checked in by friberg, 15 years ago (diff)

Unix version of libsrc for POSIX systems

  • 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.1  2005/07/15 18:20:20  friberg
11 *     Unix version of libsrc for POSIX systems
12 *
13 *     Revision 1.5  2004/04/12 22:27:51  dietz
14 *     included string.h
15 *
16 *     Revision 1.4  2001/03/15 23:53:31  alex
17 *     removed "free( cmnd )" commands, since cmnd is not malloced! Alex
18 *
19 *     Revision 1.3  2001/03/14 21:11:37  lucky
20 *     Changed the way that the message is built and sent -- no more
21 *     standard input method -- just echo the message into the mail program.
22 *
23 *     Revision 1.2  2000/06/30 17:35:12  lombard
24 *     Added call to stat() to check for existence of mail program
25 *
26 *     Revision 1.1  2000/02/14 18:46:17  lucky
27 *     Initial revision
28 *
29 *
30 */
31
32                     /*******************************
33                      *          sendmail           *
34                      *                             *
35                      *   Function to send email.   *
36                      *******************************/
37
38#include <stdio.h>
39#include <string.h>
40#include <malloc.h>
41#include <sys/stat.h>
42#include <sys/types.h>
43#include <errno.h>
44#include <earthworm.h>
45
46
47#define DEFAULT_MAIL_PROG       "/usr/ucb/Mail"
48
49/*
50 * SendMail ()
51 *   list of receipients
52 *   number of emails to send
53 *   mail program to use
54 *   subject of the message
55 *   message to send
56 *   message prefix
57 *   message suffix
58 *   mail server to use
59 *
60 *
61 * Modified by Lucky Vidmar Tue Jan 19 16:05:00 MST 1999
62 *  to include the message and the configurable mail program
63 *
64 */
65
66
67int SendMail( char person[][60], int nmail, char *mailProg, 
68                      char *subject, char *msg, char *msgPrefix, 
69                      char *msgSuffix, char *mailServer )
70{
71   FILE *f;
72   char MsgText[MAX_EMAIL_MSG_SIZE]; 
73   char cmnd[2*MAX_EMAIL_MSG_SIZE]; 
74   char *msg_ptr;       
75   int  i, max_char;
76   struct stat mailstat;
77
78   /* Check incomming arguments */
79   if (mailServer == NULL)
80   {
81      fprintf( stderr, "sendmail: Invalid arguments passed in\n" );
82      return( -1 );
83   }
84
85   if (mailProg == NULL)
86   {
87      mailProg = (char *) calloc ((strlen (DEFAULT_MAIL_PROG) + 1), 
88                          sizeof (char));
89      strcpy (mailProg, DEFAULT_MAIL_PROG);
90   }
91
92   /* Make sure we can find the mail program */
93   if ( stat(mailProg, &mailstat) < 0)
94   {
95     fprintf(stderr, "SendMail: error accessing mail program <%s>: %s\n",
96             mailProg, strerror(errno));
97     return( -1 );
98   }
99   /* Maybe we should check for execute permissions but that takes more work */
100
101
102   /* Build the message */
103   if (msgPrefix != NULL)
104       sprintf (MsgText, "%s%s", msgPrefix, msg);
105   else 
106                sprintf (MsgText, "%s", msg);
107   
108   if (msgSuffix != NULL)
109        strcat (MsgText, msgSuffix);
110
111   for ( i = 0; i < nmail; i++ )
112   {
113      /* Mail message without a subject */
114      if (subject == NULL)
115      {
116         (void) sprintf( cmnd, "echo \"%s\" | %s %s", 
117                                                                MsgText, mailProg, person[i] );
118      }
119      /* Mail message with the given subject */
120      else
121      {
122         (void) sprintf( cmnd, "echo \"%s\" | %s -s \"%s\" %s", 
123                                                                        MsgText, mailProg, subject, person[i] );
124      }
125
126      if ( ( f = popen( cmnd, "w" ) ) == NULL )
127      {
128         fprintf( stderr, "sendmail: Can't run command \"%s\"\n", cmnd );
129         return( -1 );
130      }
131      pclose( f );
132   }
133   return( 0 );
134}
135
Note: See TracBrowser for help on using the repository browser.