File mailx-12.5-replyto.patch of Package mailx

--- collect.c
+++ collect.c	2006-07-20 11:21:32.000000000 +0000
@@ -720,7 +720,7 @@ cont:
 			 * Grab a bunch of headers.
 			 */
 			do
-				grabh(hp, GTO|GSUBJECT|GCC|GBCC,
+				grabh(hp, GTO|GSUBJECT|GCC|GBCC|GREPLYTO,
 						value("bsdcompat") != NULL &&
 						value("bsdorder") != NULL);
 			while (hp->h_to == NULL);
@@ -743,13 +743,21 @@ cont:
 			break;
 		case 's':
 			/*
-			 * Set the Subject list.
+			 * Set the Subject line.
 			 */
 			cp = &linebuf[2];
 			while (whitechar(*cp & 0377))
 				cp++;
 			hp->h_subject = savestr(cp);
 			break;
+		case 'R':
+			/*
+			 * Add to the Reply-To list.
+			 */
+			cp = &linebuf[2];
+			while ((hp->h_replyto = checkaddrs(cat(hp->h_replyto,
+					sextract(&linebuf[2], GREPLYTO|GFULL))))
+				== NULL);
 		case '@':
 			/*
 			 * Edit the attachment list.
--- def.h
+++ def.h	2006-07-20 11:21:32.000000000 +0000
@@ -393,7 +393,7 @@ enum gfield {
 	GUA	= 128,		/* User-Agent field */
 	GMIME	= 256,		/* MIME 1.0 fields */
 	GMSGID	= 512,		/* a Message-ID */
-	/*	  1024 */	/* unused */
+	GREPLYTO= 1024,		/* a Reply-To field */
 	GIDENT	= 2048,		/* From:, Reply-To: and Organization: field */
 	GREF	= 4096,		/* References: field */
 	GDATE	= 8192,		/* Date: field */
@@ -403,7 +403,7 @@ enum gfield {
 	GFILES	= 131072	/* include filename addresses */
 };
 
-#define	GMASK	(GTO|GSUBJECT|GCC|GBCC)	/* Mask of places from whence */
+#define	GMASK	(GTO|GSUBJECT|GCC|GBCC|GREPLYTO)	/* Mask of places from whence */
 
 #define	visible(mp)	(((mp)->m_flag&(MDELETED|MHIDDEN|MKILL))==0|| \
 				dot==(mp) && (mp)->m_flag&MKILL)
--- extern.h
+++ extern.h	2011-05-13 09:07:33.891926124 +0000
@@ -457,7 +457,7 @@ int send(struct message *mp, FILE *obuf,
 		char *prefix, enum sendaction action, off_t *stats);
 /* sendout.c */
 char *makeboundary(void);
-int mail(struct name *to, struct name *cc, struct name *bcc,
+int mail(struct name *to, struct name *cc, struct name *bcc, struct name *replyto,
 		struct name *smopts, char *subject, struct attachment *attach,
 		char *quotefile, int recipient_record, int tflag, int Eflag);
 int sendmail(void *v);
--- mailx.1
+++ mailx.1	2011-05-13 09:11:27.640426515 +0000
@@ -43,7 +43,7 @@ mailx \- send and receive Internet mail
 .PD 0
 .HP
 .ad l
-\fBmailx\fR [\fB\-BDdEFintv~\fR]
+\fBmailx\fR [\fB\-BDdEFintv~\fR] [\fB\-R\fR [\fIaddress\fR]]
 [\fB\-s\fI\ subject\fR] [\fB\-a\fI\ attachment\fR ]
 [\fB\-c\fI\ cc-addr\fR] [\fB\-b\fI\ bcc-addr\fR] [\fB\-r\fI\ from-addr\fR]
 [\fB\-h\fI\ hops\fR]
@@ -203,8 +203,12 @@ it is recommended to set the
 .I from
 variable directly instead.
 .TP
+.BI \-R\ \fR|\fB\ \-R \ address
+Without any argument any folders will be opened read-only.
+With argument an reply-to adress is specifed on command line.
+Only the first argument after the
 .B \-R
-Opens any folders read-only.
+flag is used as the address.
 .TP
 .BI \-s \ subject
 Specify subject on command line (only the first argument after the
@@ -2131,6 +2135,9 @@ copying the message to
 `dead.letter' in the user's home directory
 if save is set.
 .TP
+.BI ~R string
+Use string as the Reply-To field.
+.TP
 .BI ~r filename
 Read the named file into the message.
 .TP
--- main.c
+++ main.c	2011-05-13 09:18:29.747926305 +0000
@@ -52,6 +52,11 @@ static char sccsid[] = "@(#)main.c	2.51
  * Note: We set egid to realgid ... and only if we need the egid we will
  *       switch back temporary.  Nevertheless, I do not like seg faults.
  *       Werner Fink, <werner@suse.de>
+ * ---
+ * We want to set reply-to on the command line to deal with antispam rules
+ * and adresses behind firewalls.
+ * 2000-07-19, poc@pocnet.net
+ * Changes by werner@suse.de (move Option r to R, make ~R work)
  */
 
 
@@ -87,9 +92,9 @@ static void setscreensize(int dummy);
 int 
 main(int argc, char *argv[])
 {
-	const char optstr[] = "A:BHEFINVT:RS:a:b:c:dDefh:inqr:s:tu:v~";
+	const char optstr[] = "A:BHEFINVT:R::S:a:b:c:dDefh:inqr:s:tu:v~";
 	int i, existonly = 0, headersonly = 0, sendflag = 0;
-	struct name *to, *cc, *bcc, *smopts;
+	struct name *to, *cc, *bcc, *replyto, *smopts;
 	struct attachment *attach;
 	char *subject, *cp, *ef, *qf = NULL, *fromaddr = NULL, *Aflag = NULL;
 	char nosrc = 0;
@@ -179,6 +184,8 @@ main(int argc, char *argv[])
 	attach = NULL;
 	smopts = NULL;
 	subject = NULL;
+	replyto = NULL;
+
 	while ((i = getopt(argc, argv, optstr)) != EOF) {
 		switch (i) {
 		case 'V':
@@ -348,12 +355,18 @@ main(int argc, char *argv[])
 			Aflag = optarg;
 			break;
 		case 'R':
-			Rflag = 1;
+			/*
+			 * Set the Reply-to Address (as who we send mail)
+			 */
+			if (optarg && *optarg)
+				replyto = checkaddrs(cat(replyto, extract(optarg, GREPLYTO|GFULL)));
+			else
+				Rflag = 1;
 			break;
 		case '?':
 usage:
 			fprintf(stderr, catgets(catd, CATSET, 135,
-"Usage: %s -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users\n"), progname);
+"Usage: %s -eiIUdEFntBDNHV~ [-R [reply-address]] -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users\n"), progname);
 			exit(2);
 		}
 	}
@@ -387,6 +400,10 @@ usage:
 		fprintf(stderr, "The -R option is meaningless in send mode.\n");
 		goto usage;
 	}
+	if (replyto && to == NULL) {
+		fprintf(stderr, "The reply-to is meaningless not in send mode.\n");
+		goto usage;
+	}
 	if (Iflag && ef == NULL) {
 		fprintf(stderr, catgets(catd, CATSET, 204,
 					"Need -f with -I.\n"));
@@ -441,8 +458,8 @@ usage:
 	if (fromaddr)
 		assign("from", fromaddr);
 	if (!rcvmode) {
-		mail(to, cc, bcc, smopts, subject, attach, qf, Fflag, tflag,
-		    Eflag);
+		mail(to, cc, bcc, replyto, smopts, subject, attach, qf,
+		    Fflag, tflag, Eflag);
 		/*
 		 * why wait?
 		 */
--- sendout.c
+++ sendout.c	2011-05-13 09:19:01.288426393 +0000
@@ -712,7 +712,7 @@ savemail(char *name, FILE *fi)
  * which does all the dirty work.
  */
 int 
-mail(struct name *to, struct name *cc, struct name *bcc,
+mail(struct name *to, struct name *cc, struct name *bcc, struct name *replyto,
 		struct name *smopts, char *subject, struct attachment *attach,
 		char *quotefile, int recipient_record, int tflag, int Eflag)
 {
@@ -731,6 +731,7 @@ mail(struct name *to, struct name *cc, s
 		head.h_to = to;
 		head.h_cc = cc;
 		head.h_bcc = bcc;
+		head.h_replyto = replyto;
 	}
 	head.h_attach = attach;
 	head.h_smopts = smopts;
--- tty.c
+++ tty.c	2006-07-20 11:21:39.000000000 +0000
@@ -338,6 +338,12 @@ grabh(struct header *hp, enum gfield gfl
 		hp->h_organization = rtty_internal("Organization: ",
 				hp->h_organization);
 	}
+	if (gflags & GREPLYTO) {
+		TTYSET_CHECK(hp->h_replyto)
+		hp->h_replyto = checkaddrs(sextract(rtty_internal("Reply-To: ",
+						   detract(hp->h_replyto, comma)),
+					GREPLYTO|GFULL));
+	}
 	if (!subjfirst)
 		GRAB_SUBJECT
 out: