|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.