1: #include "parms.h" 2: #include "structs.h" 3: 4: #ifdef RCSIDENT 5: static char rcsid[] = "$Header: mailit.c,v 1.7.0.3 85/07/25 14:07:21 notes Rel $"; 6: #endif RCSIDENT 7: 8: /* 9: * mailit 10: * 11: * takes the text record specified, along with the notefile name, 12: * the author name, (other things added later), and builds a 13: * temp file. The user is prompted for a list of the people to 14: * send the file to. After an edit session, the mail is sent. 15: * 16: * Returns: -1 if no letter sent 17: * 0 if letter sent (or if it thinks so) 18: * 19: * Original author: Ray Essick June 1981. 20: * modified: Ray Essick December 1981. 21: * modified again: Thanks to Malcolm Slaney of Purdue EE dept. 22: * added the SUPERMAILER processing. May 25, 1982 23: * 24: */ 25: 26: mailit (io, where, author, date, title, toauth, wtext) 27: struct io_f *io; 28: struct daddr_f *where; 29: struct auth_f *author; 30: struct when_f *date; 31: char *title; 32: /* toauth - true if mail to author of note */ 33: /* wtext - true is mail with text of note */ 34: { 35: char buf[128]; /* > 5 + 80 + 3 + 15 */ 36: char whoto[WDLEN + 1]; /* destination */ 37: char *command; /* mailer to use */ 38: char fn[20]; /* hold scratch file name */ 39: int f; 40: char *p; 41: #ifdef SUPERMAILER 42: char subject[TITLEN + 20]; /* subject line for super mailer */ 43: #endif 44: int i; 45: FILE * txtfile; 46: 47: if (toauth) 48: { 49: if (strcmp (author -> aname, "Anonymous") == 0) 50: { 51: printf ("Can't send to Anonymous\n"); 52: fflush (stdout); 53: sleep (2); 54: return (-1); 55: } 56: } 57: 58: if (toauth) 59: { 60: if (strcmp (System, author -> asystem) != 0) 61: { 62: #ifdef USERHOST 63: sprintf (whoto, "%s@%s", author -> aname, author -> asystem); 64: #else 65: sprintf (whoto, "%s!%s", author -> asystem, author -> aname); 66: #endif USERHOST 67: } 68: else 69: sprintf (whoto, "%s", author -> aname); 70: } 71: else 72: { 73: at (0, 1); 74: printf ("\nSend to whom? "); 75: if (gline (whoto, WDLEN) == 1) /* will flush stdout */ 76: return (-1); /* no letter sent */ 77: 78: } 79: 80: #ifdef SUPERMAILER 81: strcpy (subject, title); 82: for (p = subject; *p; p++) 83: if (*p == '"' || *p == '`') 84: *p = '\''; /* eliminate escape troubles */ 85: #endif SUPERMAILER 86: 87: sprintf (fn, "/tmp/nfm%d", getpid ()); 88: x ((txtfile = fopen (fn, "w")) == NULL, "mailit: creat tmp"); 89: x (chmod (fn, 0666) < 0, "mailit: chmod tmp"); 90: 91: if (wtext) /* add text if specified */ 92: { 93: preptxt (io, txtfile, author, date, where, title); 94: } 95: 96: fclose (txtfile); 97: 98: if ((command = getenv ("MAILER")) == NULL) /* override it? */ 99: command = MAILER; /* use default */ 100: at (0, 1); 101: #ifdef SUPERMAILER /* dumb mail interface */ 102: if (wtext) /* do it hard way if with text */ 103: { 104: #endif 105: printf ("Edit letter:\n"); 106: fflush (stdout); /* clean out buffer */ 107: #ifndef FASTFORK 108: sprintf (buf, "%s %s", hised, fn); /* build edit command */ 109: dounix (buf, 1, 1); /* call editor */ 110: #else 111: dounix (1, 1, hised, fn, 0, 0, 0); 112: #endif 113: 114: 115: f = 0; /* assume normal termination */ 116: while (1) 117: { 118: sprintf (buf, "Send this to %s? (y/n):", whoto); 119: fflush (stdout); 120: if (askyn (buf) == 'y') 121: { 122: printf ("\nSending...\n"); 123: fflush (stdout); 124: #ifdef SUPERMAILER 125: sprintf (buf, "%s -s \"%s\" %s < %s", command, subject, whoto, fn); 126: #else 127: sprintf (buf, "%s %s < %s", command, whoto, fn); 128: #endif 129: /* make the command */ 130: #ifndef FASTFORK 131: f = dounix (buf, 1, 0); /* mail the thing */ 132: #else 133: f = dounix (1, 0, DFLTSH, "-c", buf, 0, 0); 134: /* 135: * Can't let him use the C shell, since we don't escape the '!' in 136: * remote addresses. RBE 6/21/82 137: */ 138: #endif 139: break; /* out of loop */ 140: } 141: else /* not to him... */ 142: { 143: /* 144: * let him pick a new addressee 145: */ 146: printf ("\nSend to whom? "); 147: if (gline (whoto, WDLEN) == 1) /* will flush stdout */ 148: break; /* don't send */ 149: 150: } 151: } 152: #ifdef SUPERMAILER /* simple case for SUPERMAILER */ 153: } 154: else 155: { 156: printf ("%s %s\n", command, whoto); 157: fflush (stdout); /* empty buffers */ 158: sprintf (buf, "%s %s", command, whoto); 159: #ifndef FASTFORK 160: f = dounix (buf, 1, 1); /* set the uid & tty */ 161: #else 162: f = dounix (1, 1, DFLTSH, "-c", buf, 0, 0); /* do it */ 163: #endif FASTFORK 164: } 165: #endif SUPERMAILER 166: 167: #ifdef SUPERMAILER 168: if (f != 0) /* pause for error message */ 169: { 170: fflush (stdout); 171: sleep (2); 172: } 173: unlink (fn); 174: #else 175: if (f != 0) /* check error message */ 176: { 177: fprintf ("Couldn't deliver mail; draft left in %s\n", fn); 178: fflush (stdout); 179: sleep (2); 180: } 181: else 182: unlink (fn); 183: #endif SUPERMAILER 184: 185: return 0; 186: }