4.3BSD/usr/contrib/notes/src/mailit.c

Compare this file to the similar file:
Show the results in this format:

#include "parms.h"
#include "structs.h"

#ifdef	RCSIDENT
static char rcsid[] = "$Header: mailit.c,v 1.7.0.3 85/07/25 14:07:21 notes Rel $";
#endif	RCSIDENT

/*
 *	mailit
 *
 *	takes the text record specified, along with the notefile name,
 *	the author name, (other things added later), and builds a 
 *	temp file. The user is prompted for a list of the people to
 *	send the file to. After an edit session, the mail is sent.
 *
 *	Returns:	-1 if no letter sent
 *			 0 if letter sent (or if it thinks so)
 *
 *	Original author: Ray Essick	June 1981.
 *	modified:	Ray Essick	December 1981.
 *	modified again:	Thanks to Malcolm Slaney of Purdue EE dept.
 *		added the SUPERMAILER processing. May 25, 1982
 *
 */

mailit (io, where, author, date, title, toauth, wtext)
struct io_f *io;
struct daddr_f *where;
struct auth_f  *author;
struct when_f  *date;
char   *title;
/* toauth - true if mail to author of note */
/* wtext - true is mail with text of note */
{
    char    buf[128];					/* > 5 + 80 + 3 + 15 */
    char    whoto[WDLEN + 1];				/* destination */
    char   *command;					/* mailer to use */
    char    fn[20];					/* hold scratch file name */
    int     f;
    char   *p;
#ifdef	SUPERMAILER
    char    subject[TITLEN + 20];			/* subject line for super mailer */
#endif
    int     i;
    FILE * txtfile;

    if (toauth)
    {
	if (strcmp (author -> aname, "Anonymous") == 0)
	{
	    printf ("Can't send to Anonymous\n");
	    fflush (stdout);
	    sleep (2);
	    return (-1);
	}
    }

    if (toauth)
    {
	if (strcmp (System, author -> asystem) != 0)
	{
#ifdef	USERHOST
	    sprintf (whoto, "%s@%s", author -> aname, author -> asystem);
#else
	    sprintf (whoto, "%s!%s", author -> asystem, author -> aname);
#endif	USERHOST
	}
	else
	    sprintf (whoto, "%s", author -> aname);
    }
    else
    {
	at (0, 1);
	printf ("\nSend to whom? ");
	if (gline (whoto, WDLEN) == 1)			/* will flush stdout */
	    return (-1);				/* no letter sent */

    }

#ifdef	SUPERMAILER
    strcpy (subject, title);
    for (p = subject; *p; p++)
	if (*p == '"' || *p == '`')
	    *p = '\'';					/* eliminate escape troubles */
#endif	SUPERMAILER

    sprintf (fn, "/tmp/nfm%d", getpid ());
    x ((txtfile = fopen (fn, "w")) == NULL, "mailit: creat tmp");
    x (chmod (fn, 0666) < 0, "mailit: chmod tmp");

    if (wtext)						/* add text if specified */
    {
	preptxt (io, txtfile, author, date, where, title);
    }

    fclose (txtfile);

    if ((command = getenv ("MAILER")) == NULL)		/* override it? */
	command = MAILER;				/* use default */
    at (0, 1);
#ifdef	SUPERMAILER					/* dumb mail interface */
    if (wtext)						/* do it hard way if with text */
    {
#endif
	printf ("Edit letter:\n");
	fflush (stdout);				/* clean out buffer */
#ifndef	FASTFORK
	sprintf (buf, "%s %s", hised, fn);		/* build edit command */
	dounix (buf, 1, 1);				/* call editor */
#else
	dounix (1, 1, hised, fn, 0, 0, 0);
#endif


	f = 0;						/* assume normal termination */
	while (1)
	{
	    sprintf (buf, "Send this to %s? (y/n):", whoto);
	    fflush (stdout);
	    if (askyn (buf) == 'y')
	    {
		printf ("\nSending...\n");
		fflush (stdout);
#ifdef SUPERMAILER
		sprintf (buf, "%s -s \"%s\" %s < %s", command, subject, whoto, fn);
#else
		sprintf (buf, "%s %s < %s", command, whoto, fn);
#endif
							/* make the command */
#ifndef	FASTFORK
		f = dounix (buf, 1, 0);			/* mail the thing */
#else
		f = dounix (1, 0, DFLTSH, "-c", buf, 0, 0);
/*
 *	Can't let him use the C shell, since we don't escape the '!' in
 *	remote addresses. RBE 6/21/82
 */
#endif
		break;					/* out of loop */
	    }
	    else					/* not to him... */
	    {
		/* 
		 * let him pick a new addressee
		 */
		printf ("\nSend to whom? ");
		if (gline (whoto, WDLEN) == 1)		/* will flush stdout */
		    break;				/* don't send */

	    }
	}
#ifdef	SUPERMAILER					/* simple case for SUPERMAILER */
    }
    else
    {
	printf ("%s %s\n", command, whoto);
	fflush (stdout);				/* empty buffers */
	sprintf (buf, "%s %s", command, whoto);
#ifndef	FASTFORK
	f = dounix (buf, 1, 1);				/* set the uid & tty */
#else
	f = dounix (1, 1, DFLTSH, "-c", buf, 0, 0);	/* do it */
#endif	FASTFORK
    }
#endif	SUPERMAILER

#ifdef	SUPERMAILER
    if (f != 0)						/* pause for error message */
    {
	fflush (stdout);
	sleep (2);
    }
    unlink (fn);
#else
    if (f != 0)						/* check error message */
    {
	fprintf ("Couldn't deliver mail; draft left in %s\n", fn);
	fflush (stdout);
	sleep (2);
    }
    else
	unlink (fn);
#endif	SUPERMAILER

    return 0;
}