*** art.c.orig	Sat Jul 12 21:29:02 1997
--- art.c	Tue Jul 15 17:07:21 1997
***************
*** 2774,2780 ****
     perform_cc = -1;		       /* Don't know */
     cc_address = NULL;
  
!    if (NULL != (newsgroups = slrn_extract_header ("Followup-To: ", 13)))
       {
  	newsgroups = slrn_skip_whitespace (newsgroups);
  	cc_address = parse_from (newsgroups);
--- 2774,2781 ----
     perform_cc = -1;		       /* Don't know */
     cc_address = NULL;
  
!    if (Slrn_Post_Obj->po_news &&
!        (NULL != (newsgroups = slrn_extract_header ("Followup-To: ", 13))))
       {
  	newsgroups = slrn_skip_whitespace (newsgroups);
  	cc_address = parse_from (newsgroups);
***************
*** 2809,2819 ****
  	return;
       }
  
!    if ((newsgroups == NULL)
         /* Hmm..  I have also seen an empty Followup-To: header on a GNU
  	* newsgroup.
  	*/
!        || (*newsgroups == 0))
       {
  	if (NULL == (newsgroups = slrn_extract_header ("Newsgroups: ", 12)))
  	  newsgroups = "";
--- 2810,2820 ----
  	return;
       }
  
!    if (Slrn_Post_Obj->po_news && ((newsgroups == NULL)
         /* Hmm..  I have also seen an empty Followup-To: header on a GNU
  	* newsgroup.
  	*/
!        || (*newsgroups == 0)))
       {
  	if (NULL == (newsgroups = slrn_extract_header ("Newsgroups: ", 12)))
  	  newsgroups = "";
***************
*** 2899,2906 ****
  	return;
       }
     
!    fprintf (fp, "Newsgroups: %s\nSubject: Re: %s\n",
! 	    newsgroups, subject);  n = 3;
     
     xref = slrn_extract_header("References: ", 12);
     if (msgid != NULL)
--- 2900,2917 ----
  	return;
       }
     
!    if (Slrn_Post_Obj->po_news)
!      {
! 	fprintf (fp, "Newsgroups: %s\nSubject: Re: %s\n", newsgroups, subject);
! 	n = 3;
!      }
!    else
!      {
! 	/* For now, assume the group name is the list e-mail address */
! 	fprintf (fp, "To: %s\nSubject: Re: %s\n",
! 		 Slrn_Current_Group_Name, subject);
! 	n = 3;
!      }
     
     xref = slrn_extract_header("References: ", 12);
     if (msgid != NULL)
***************
*** 2930,2938 ****
  	n++;
       }
     
!    fprintf (fp, "Followup-To: \n");
!    n++;
!    
     n += slrn_add_custom_headers (fp, Slrn_Followup_Custom_Headers, slrn_insert_followup_format);
     
     fputs ("\n", fp);
--- 2941,2952 ----
  	n++;
       }
     
!    if (Slrn_Post_Obj->po_news)
!      {
! 	fprintf (fp, "Followup-To: \n");
! 	n++;
!      }
! 
     n += slrn_add_custom_headers (fp, Slrn_Followup_Custom_Headers, slrn_insert_followup_format);
     
     fputs ("\n", fp);
*** post.c.orig	Sat Jul 12 21:29:02 1997
--- post.c	Tue Jul 15 17:07:21 1997
***************
*** 380,386 ****
  	     continue;
  	  }
  	
! 	if (!slrn_case_strncmp ((unsigned char *) line, (unsigned char *) "Newsgroups:", 11))
  	  {
  	     if (is_empty_header (line)) 
  	       {
--- 380,387 ----
  	     continue;
  	  }
  	
! 	if (Slrn_Post_Obj->po_news &&
! 	    (!slrn_case_strncmp ((unsigned char *) line, (unsigned char *) "Newsgroups:", 11)))
  	  {
  	     if (is_empty_header (line)) 
  	       {
***************
*** 414,420 ****
  	     err = "Subject header is required.";
  	     num = 0;
  	  }
! 	else if (newsgroups_found == 0)
  	  {
  	     err = "Newsgroups header is required.";
  	     num = 0;
--- 415,421 ----
  	     err = "Subject header is required.";
  	     num = 0;
  	  }
! 	else if (Slrn_Post_Obj->po_news && (newsgroups_found == 0))
  	  {
  	     err = "Newsgroups header is required.";
  	     num = 0;
***************
*** 681,687 ****
  	return -1;
       }
     
!    if (Slrn_User_Info.username != NULL)
       Slrn_Post_Obj->po_printf ("Path: %s\n", Slrn_User_Info.username);
     
     Slrn_Post_Obj->po_printf ("From: %s@%s (%s)\n", Slrn_User_Info.username, Slrn_User_Info.host, Slrn_User_Info.realname);
--- 682,688 ----
  	return -1;
       }
     
!    if (Slrn_Post_Obj->po_news && (Slrn_User_Info.username != NULL))
       Slrn_Post_Obj->po_printf ("Path: %s\n", Slrn_User_Info.username);
     
     Slrn_Post_Obj->po_printf ("From: %s@%s (%s)\n", Slrn_User_Info.username, Slrn_User_Info.host, Slrn_User_Info.realname);
***************
*** 716,723 ****
  		  if (Slrn_Use_Mime)
  		    slrn_mime_add_headers (0);   /* 0 --> Slrn_Post_Obj->po_puts */
  #endif
! 		  Slrn_Post_Obj->po_printf ("X-Newsreader: slrn (%s %s)\n\n", Slrn_Version, 
! 			       SYSTEM_OS_NAME);
  		  header = 0;
  #if SLRN_HAS_MIME
  		  if (Slrn_Use_Mime) fp = slrn_mime_encode (fp);
--- 717,728 ----
  		  if (Slrn_Use_Mime)
  		    slrn_mime_add_headers (0);   /* 0 --> Slrn_Post_Obj->po_puts */
  #endif
! 		  if (Slrn_Post_Obj->po_news)
! 		    Slrn_Post_Obj->po_printf ("X-Newsreader: slrn (%s %s)\n\n",
! 					      Slrn_Version, SYSTEM_OS_NAME);
! 		  else
! 		    Slrn_Post_Obj->po_printf ("X-Mailer: slrn (%s %s)\n\n",
! 					      Slrn_Version, SYSTEM_OS_NAME);
  		  header = 0;
  #if SLRN_HAS_MIME
  		  if (Slrn_Use_Mime) fp = slrn_mime_encode (fp);
***************
*** 726,733 ****
  		  continue;
  	       }
  	     
! 	     if (!slrn_case_strncmp ((unsigned char *)"Cc: ", 
! 				     (unsigned char *)linep, 4))
  	       {
  		  b = (unsigned char *) linep + 4;
  		  b = (unsigned char *) slrn_skip_whitespace ((char *) b);
--- 731,739 ----
  		  continue;
  	       }
  	     
! 	     if (Slrn_Post_Obj->po_news &&
! 		 (!slrn_case_strncmp ((unsigned char *)"Cc: ",
! 				      (unsigned char *)linep, 4)))
  	       {
  		  b = (unsigned char *) linep + 4;
  		  b = (unsigned char *) slrn_skip_whitespace ((char *) b);
*** server.c.orig	Sat Jul 12 21:29:02 1997
--- server.c	Tue Jul 15 17:07:21 1997
***************
*** 114,119 ****
--- 114,120 ----
     Inews_Post_Obj.po_printf = inews_printf;
     Inews_Post_Obj.po_puts = inews_puts;
     Inews_Post_Obj.po_can_post = 1;
+    Inews_Post_Obj.po_news = 1;
     Slrn_Inews_Pgm = slrn_safe_strmalloc (SLRN_INEWS_PROGRAM);
     return 0;
  }
***************
*** 165,170 ****
--- 166,263 ----
  #endif				       /* HAS_INEWS_SUPPORT */
  
  
+ #if SLRN_HAS_MAIL_SUPPORT
+ static FILE *Fp_Sendmail;
+ 
+ static int mail_start_post (void)
+ {
+    /* pipe a message to sendmail */
+    if (NULL == (Fp_Sendmail = slrn_popen (Slrn_SendMail_Command, "w")))
+      {
+ 	slrn_error ("Couldn't open pipe to sendmail! -- Article not posted.");
+ 	return -1;
+      }
+    return CONT_POST;
+ }
+ 
+ static int mail_end_post (void)
+ {
+    int res = 0;
+    
+    if (-1 == slrn_pclose (Fp_Sendmail))
+      {
+ 	slrn_error ("pclose() failed -- check if article was posted"); /* !HACK! can we do better? */
+ 	res = -1;
+      }
+    Fp_Sendmail=NULL;
+    
+    return res;
+ }
+ 
+ static int mail_puts (char *s)
+ {
+    fputs (s, Fp_Sendmail );
+    return 0;
+ }
+ 
+ static int mail_printf (char *fmt, ...)
+ {
+    va_list ap;
+ 
+    char buf [1024];
+    
+    va_start (ap, fmt);
+    vsprintf (buf, fmt, ap);
+    va_end (ap);
+    
+    return mail_puts(buf);
+ }
+ 
+ 
+ static Slrn_Post_Obj_Type Mail_Post_Obj;
+ 
+ static int mail_init_objects (void)
+ {
+    Mail_Post_Obj.po_start = mail_start_post;
+    Mail_Post_Obj.po_end = mail_end_post;
+    Mail_Post_Obj.po_printf = mail_printf;
+    Mail_Post_Obj.po_puts = mail_puts;
+    Mail_Post_Obj.po_can_post = 1;
+    Mail_Post_Obj.po_news = 0;
+    return 0;
+ }
+ 
+ static int mail_select_post_object (void)
+ {   
+    Slrn_Post_Obj = &Mail_Post_Obj;
+    return 0;
+ }
+ 
+ static void mail_usage (void)
+ {
+    fputs ("--mail options:\n\
+ ",
+ 	  stdout);
+    exit (0);
+ }
+ 
+ static int mail_parse_args (char **argv, int argc)
+ {
+    int i;
+    
+    for (i = 0; i < argc; i++)
+      {
+ 	if (!strcmp (argv[i], "--help"))
+ 	  mail_usage ();
+ 	else break;
+      }
+    
+    return i;
+ }
+ 
+ #endif				       /* HAS_INEWS_SUPPORT */
+ 
+ 
  int slrn_init_objects (void)
  {
     char *server;
***************
*** 185,190 ****
--- 278,287 ----
     if (-1 == pull_init_objects ())
       return -1;
  #endif
+ #if SLRN_HAS_MAIL_SUPPORT
+    if (-1 == mail_init_objects ())
+      return -1;
+ #endif
     
     switch (Slrn_Server_Id)
       {
***************
*** 245,250 ****
--- 342,352 ----
  	return pull_select_post_object ();
  #endif
  
+ #if SLRN_HAS_MAIL_SUPPORT
+       case SLRN_POST_ID_MAIL:
+ 	return mail_select_post_object ();
+ #endif
+ 
        default:
  	post = slrn_map_object_id_to_name (1, id);
  	if (post == NULL)
***************
*** 350,355 ****
--- 452,468 ----
  #endif
       }
  
+    if (!strcmp (name, "mail"))
+      {
+ #if SLRN_HAS_MAIL_SUPPORT
+ 	num_parsed = pull_parse_args (argv, argc);
+ 	Slrn_Post_Id = SLRN_POST_ID_MAIL;
+ 	return num_parsed;
+ #else
+ 	return -2;
+ #endif
+      }
+ 
     return num_parsed;
  }
  
***************
*** 585,590 ****
--- 698,704 ----
     Pull_Post_Obj.po_printf = pull_printf;
     Pull_Post_Obj.po_puts = pull_puts;
     Pull_Post_Obj.po_can_post = 1;
+    Pull_Post_Obj.po_news = 1;
  
     return 0;
  }
*** server.h.orig	Sat Jul 12 21:29:02 1997
--- server.h	Tue Jul 15 17:07:21 1997
***************
*** 10,15 ****
--- 10,16 ----
     int (*po_printf)(char *, ...);
     int (*po_puts)(char *);
     int po_can_post;
+    int po_news;
  } Slrn_Post_Obj_Type;
  
  typedef struct 
*** slrnfeat.h.orig	Sat Jul 12 21:29:01 1997
--- slrnfeat.h	Tue Jul 15 17:07:21 1997
***************
*** 12,17 ****
--- 12,18 ----
  #define SLRN_HAS_NNTP_SUPPORT	1
  #define SLRN_HAS_SPOOL_SUPPORT	1
  #define SLRN_HAS_INEWS_SUPPORT	1
+ #define SLRN_HAS_MAIL_SUPPORT	1
  /* Set this to 1 to force the user to use INEWS for posting.  This also means
   * that slrn will use the hardcoded inews program pathname.
   */
*** spool.c.orig	Sat Jul 12 21:29:02 1997
--- spool.c	Tue Jul 15 17:07:21 1997
***************
*** 140,146 ****
     FILE *fp;
     
     /* The spool_dircat function will exit if it fails to malloc. */
!    p = slrn_spool_dircat (Slrn_Nov_Root, Spool_Group_Name, 1);
     q = slrn_spool_dircat (p, Slrn_Nov_File, 0);
     
     fp = fopen (q,"rb");
--- 140,148 ----
     FILE *fp;
     
     /* The spool_dircat function will exit if it fails to malloc. */
!    /* Don't map '.' to '/' if the group name is an email address */
!    p = slrn_spool_dircat (Slrn_Nov_Root, Spool_Group_Name,
! 			  (NULL == strchr(Spool_Group_Name, '@')));
     q = slrn_spool_dircat (p, Slrn_Nov_File, 0);
     
     fp = fopen (q,"rb");
***************
*** 878,884 ****
     slrn_free (Spool_Group);
     slrn_free (Spool_Group_Name);
     
!    Spool_Group = slrn_spool_dircat (Slrn_Spool_Root, name, 1);
     Spool_Group_Name = slrn_safe_strmalloc (name);
     
  #if DEBUG_SPOOL
--- 880,888 ----
     slrn_free (Spool_Group);
     slrn_free (Spool_Group_Name);
     
!    /* Don't map '.' to '/' if the group name is an email address */
!    Spool_Group = slrn_spool_dircat (Slrn_Spool_Root, name,
! 				    (NULL == strchr(name, '@')));
     Spool_Group_Name = slrn_safe_strmalloc (name);
     
  #if DEBUG_SPOOL
*** sysconf.h.orig	Tue Jul 15 17:07:09 1997
--- sysconf.h	Tue Jul 15 17:07:21 1997
***************
*** 114,119 ****
--- 114,120 ----
  #define SLRN_POST_ID_NNTP 1
  #define SLRN_POST_ID_INEWS 2
  #define SLRN_POST_ID_PULL 3
+ #define SLRN_POST_ID_MAIL 4
  
  #define SLRN_PATH_SLASH_CHAR	'/'
  

