diff -rud mlmmj-1.2.17.Orig/TUNABLES mlmmj-1.2.17/TUNABLES
--- mlmmj-1.2.17.Orig/TUNABLES	2010-01-10 14:40:56.000000000 +0100
+++ mlmmj-1.2.17/TUNABLES	2011-09-12 14:04:08.831681520 +0200
@@ -42,7 +42,8 @@
  · subonlypost			(boolean)
 
    When this file is present, only people who are subscribed to the list,
-   are allowed to post to it. The check is made against the "From:" header.
+   are allowed to post to it. The check is made against the "Envelope-from:"
+   header.
 
  · modnonsubposts		(boolean)
 
diff -rud mlmmj-1.2.17.Orig/include/listcontrol.h mlmmj-1.2.17/include/listcontrol.h
--- mlmmj-1.2.17.Orig/include/listcontrol.h	2008-10-30 21:06:19.000000000 +0100
+++ mlmmj-1.2.17/include/listcontrol.h	2011-09-12 13:36:16.095707651 +0200
@@ -26,9 +26,10 @@
 
 #include "find_email_adr.h"
 
-int listcontrol(struct email_container *fromemails, const char *listdir,
-		const char *controlstr, const char *mlmmjsub,
-		const char *mlmmjunsub, const char *mlmmjsend,
-		const char *mlmmjbounce, const char *mailname);
+int listcontrol(const char *efrom, struct email_container *fromemails,
+		const char *listdir, const char *controlstr,
+		const char *mlmmjsub, const char *mlmmjunsub,
+		const char *mlmmjsend, const char *mlmmjbounce,
+		const char *mailname);
 
 #endif /* LISTCONTROL_H */
diff -rud mlmmj-1.2.17.Orig/include/send_help.h mlmmj-1.2.17/include/send_help.h
--- mlmmj-1.2.17.Orig/include/send_help.h	2008-10-30 21:06:20.000000000 +0100
+++ mlmmj-1.2.17/include/send_help.h	2011-09-12 13:49:36.683695273 +0200
@@ -24,7 +24,7 @@
 #ifndef SEND_HELP_H
 #define SEND_HELP_H
 
-void send_help(const char *listdir, const char *emailaddr,
+void send_help(const char *listdir, const char* efrom, const char *emailaddr,
 	       const char *mlmmjsend, const char *name, const char *textfile);
 
 #endif
diff -rud mlmmj-1.2.17.Orig/src/listcontrol.c mlmmj-1.2.17/src/listcontrol.c
--- mlmmj-1.2.17.Orig/src/listcontrol.c	2009-06-16 12:18:12.000000000 +0200
+++ mlmmj-1.2.17/src/listcontrol.c	2011-09-12 14:06:06.851679472 +0200
@@ -99,10 +99,11 @@
 };
 
 
-int listcontrol(struct email_container *fromemails, const char *listdir,
-		const char *controlstr, const char *mlmmjsub,
-		const char *mlmmjunsub, const char *mlmmjsend,
-		const char *mlmmjbounce, const char *mailname)
+int listcontrol(const char *efrom, struct email_container *fromemails,
+		const char *listdir, const char *controlstr,
+		const char *mlmmjsub, const char *mlmmjunsub,
+		const char *mlmmjsend, const char *mlmmjbounce,
+		const char *mailname)
 {
 	char *bouncenr, *tmpstr;
 	char *param = NULL, *conffilename, *moderatefilename;
@@ -130,6 +131,7 @@
 	
 #if 0
 	log_error(LOG_ARGS, "controlstr = [%s]\n", controlstr);
+	log_error(LOG_ARGS, "efrom = [%s]\n", efrom);
 	log_error(LOG_ARGS, "fromemails->emaillist[0] = [%s]\n",
 			fromemails->emaillist[0]);
 #endif
@@ -198,11 +200,11 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "A subscribe-digest request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
@@ -210,16 +212,15 @@
 			errno = 0;
 			log_error(LOG_ARGS, "A subcribe-digest request was"
 				" denied");
-			send_help(listdir, fromemails->emaillist[0],
+			send_help(listdir, efrom, fromemails->emaillist[0],
 				mlmmjsend, "nodigest", "sub-deny-digest");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-sub: request for digest"
-					" subscription from %s",
-					fromemails->emaillist[0]);
+					" subscription from %s", efrom);
 		execlp(mlmmjsub, mlmmjsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				"-d",
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
@@ -235,11 +236,11 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "A subscribe-nomail request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
@@ -247,16 +248,15 @@
 			errno = 0;
 			log_error(LOG_ARGS, "A subcribe-nomail request was"
 				" denied");
-			send_help(listdir, fromemails->emaillist[0],
+			send_help(listdir, efrom, fromemails->emaillist[0],
 				mlmmjsend, "nonomail", "sub-deny-nomail");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-sub: request for nomail"
-					" subscription from %s",
-					fromemails->emaillist[0]);
+					" subscription from %s", efrom);
 		execlp(mlmmjsub, mlmmjsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				"-n",
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
@@ -272,20 +272,19 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "A subscribe request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-sub: request for regular"
-					" subscription from %s",
-					fromemails->emaillist[0]);
+					" subscription from %s", efrom);
 		execlp(mlmmjsub, mlmmjsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
 					mlmmjsub);
@@ -384,20 +383,19 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "An unsubscribe-digest request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-unsub: %s requests"
-					" unsubscribe from digest",
-					fromemails->emaillist[0]);
+					" unsubscribe from digest", efrom);
 		execlp(mlmmjunsub, mlmmjunsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				"-d",
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
@@ -413,20 +411,19 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "An unsubscribe-nomail request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-unsub: %s requests"
-					" unsubscribe from nomail",
-					fromemails->emaillist[0]);
+					" unsubscribe from nomail", efrom);
 		execlp(mlmmjunsub, mlmmjunsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				"-n",
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
@@ -442,20 +439,20 @@
 				" sent to a closed list. Ignoring mail");
 			return -1;
 		}
-		if (!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if (!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "An unsubscribe request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
 		log_oper(listdir, OPLOGFNAME, "mlmmj-unsub: %s requests"
 					" unsubscribe from regular list",
-					fromemails->emaillist[0]);
+					efrom);
 		execlp(mlmmjunsub, mlmmjunsub,
 				"-L", listdir,
-				"-a", fromemails->emaillist[0],
+				"-a", efrom,
 				subswitch, (char *)NULL);
 		log_error(LOG_ARGS, "execlp() of '%s' failed",
 				mlmmjunsub);
@@ -596,7 +593,7 @@
 		/* Subscriber moderation */
 		if(strncmp(param, "subscribe", 9) == 0) {
 			log_oper(listdir, OPLOGFNAME, "%s moderated %s",
-				fromemails->emaillist[0], moderatefilename);
+				efrom, moderatefilename);
 			execlp(mlmmjsub, mlmmjsub,
 					"-L", listdir,
 					"-m", param,
@@ -621,7 +618,7 @@
 		}
 
 		log_oper(listdir, OPLOGFNAME, "%s moderated %s",
-				fromemails->emaillist[0], moderatefilename);
+				efrom, moderatefilename);
 		myfree(moderatefilename);
 		execlp(mlmmjsend, mlmmjsend,
 				"-L", listdir,
@@ -633,32 +630,32 @@
 
 	/* listname+help@domain.tld */
 	case CTRL_HELP:
-		if(!strchr(fromemails->emaillist[0], '@')) {
-			/* Not a valid From: address */
+		if(!strchr(efrom, '@')) {
+			/* Not a valid Envelope-from: address */
 			errno = 0;
 			log_error(LOG_ARGS, "A help request was"
-				" sent with an invalid From: header."
+				" sent with an invalid Envelope-from: header."
 				" Ignoring mail");
 			return -1;
 		}
-		log_oper(listdir, OPLOGFNAME, "%s requested help",
-				fromemails->emaillist[0]);
-		send_help(listdir, fromemails->emaillist[0], mlmmjsend, "help", "listhelp");
+		log_oper(listdir, OPLOGFNAME, "%s requested help", efrom);
+		send_help(listdir, efrom, fromemails->emaillist[0],
+				mlmmjsend, "help", "listhelp");
 		break;
 
        /* listname+faq@domain.tld */
         case CTRL_FAQ:
-               if(!strchr(fromemails->emaillist[0], '@')) {
-                       /* Not a valid From: address */
+               if(!strchr(efrom, '@')) {
+                       /* Not a valid Envelope-from: address */
                        errno = 0;
                        log_error(LOG_ARGS, "A faq request was"
-                               " sent with an invalid From: header."
+                               " sent with an invalid Envelope-from: header."
                                " Ignoring mail");
                        return -1;
                }
-               log_oper(listdir, OPLOGFNAME, "%s requested faq",
-                               fromemails->emaillist[0]);
-               send_help(listdir, fromemails->emaillist[0], mlmmjsend, "faq", "listfaq");
+               log_oper(listdir, OPLOGFNAME, "%s requested faq", efrom);
+               send_help(listdir, efrom, fromemails->emaillist[0],
+				mlmmjsend, "faq", "listfaq");
                break;
 
 	/* listname+get-INDEX@domain.tld */
@@ -672,7 +669,7 @@
 		}
 		subonlyget = statctrl(listdir, "subonlyget");
 		if(subonlyget) {
-			if(is_subbed(listdir, fromemails->emaillist[0]) != 0) {
+			if(is_subbed(listdir, efrom) != 0) {
 				errno = 0;
 				log_error(LOG_ARGS, "A get request was sent"
 					" from a non-subscribed address to a"
@@ -696,10 +693,9 @@
 			log_error(LOG_ARGS, "Unable to open archive file");
 			exit(EXIT_FAILURE);
 		}
-		log_oper(listdir, OPLOGFNAME, "%s got archive/%s",
-				fromemails->emaillist[0], archivefilename);
+		log_oper(listdir, OPLOGFNAME, "%s got archive/%s", efrom, archivefilename);
 		execlp(mlmmjsend, mlmmjsend,
-				"-T", fromemails->emaillist[0],
+				"-T", efrom,
 				"-L", listdir,
 				"-l", "6",
 				"-m", archivefilename,
@@ -716,11 +712,9 @@
 		owner_idx = -1;
 		owners = ctrlvalues(listdir, "owner");
 		for(i = 0; i < owners->count; i++) {
-			if(strcasecmp(fromemails->emaillist[0],
-						owners->strs[i]) == 0) {
+			if(strcasecmp(efrom, owners->strs[i]) == 0) {
 				log_oper(listdir, OPLOGFNAME,
-						"%s requested sub list",
-				fromemails->emaillist[0]);
+						"%s requested sub list", efrom);
 				owner_idx = i;
 				break;
 			}
diff -rud mlmmj-1.2.17.Orig/src/mlmmj-process.c mlmmj-1.2.17/src/mlmmj-process.c
--- mlmmj-1.2.17.Orig/src/mlmmj-process.c	2010-01-10 14:40:57.000000000 +0100
+++ mlmmj-1.2.17/src/mlmmj-process.c	2011-09-12 14:08:11.595678236 +0200
@@ -503,6 +503,27 @@
 		find_email_adr(readhdrs[1].values[i], &toemails);
 	}
 
+	/* discard malformed mail with invalid From: */
+	if(fromemails.emailcount != 1) {
+		for(i = 0; i < fromemails.emailcount; i++)
+			printf("fromemails.emaillist[%d] = %s\n",
+					i, fromemails.emaillist[i]);
+		discardname = concatstr(3, listdir,
+				"/queue/discarded/", randomstr);
+		log_error(LOG_ARGS, "Discarding %s due to invalid From:",
+				mailfile);
+		for(i = 0; i < fromemails.emailcount; i++)
+			log_error(LOG_ARGS, "fromemails.emaillist[%d] = %s\n",
+					i, fromemails.emaillist[i]);
+		rename(mailfile, discardname);
+		unlink(donemailname);
+		myfree(donemailname);
+		myfree(discardname);
+		myfree(randomstr);
+		/* TODO: free emailstructs */
+		exit(EXIT_SUCCESS);
+	}
+
 	/* Cc: addresses */
 	for(i = 0; i < readhdrs[2].valuecount; i++) {
 		find_email_adr(readhdrs[2].values[i], &ccemails);
@@ -529,6 +550,23 @@
 		efrom = mystrdup("");
 	}
 
+	if(strcmp(efrom, "") == 0) { /* don't send mails with <> in From
+					     to the list */
+		discardname = concatstr(3, listdir,
+				"/queue/discarded/",
+				randomstr);
+		errno = 0;
+		log_error(LOG_ARGS, "Discarding %s due to missing envelope"
+				" from address", mailfile);
+		rename(mailfile, discardname);
+		unlink(donemailname);
+		myfree(donemailname);
+		myfree(discardname);
+		myfree(randomstr);
+		/* TODO: free emailstructs */
+		exit(EXIT_SUCCESS);
+	}
+
 	/* address extension (the "foo" part of "user+foo@domain.tld") */
 	if((envstr = getenv("DEFAULT")) != NULL) {
 		/* qmail */
@@ -612,13 +650,16 @@
 		log_error(LOG_ARGS, "listcontrol(from, %s, %s, %s, %s, %s, %s)\n", listdir, toemails.emaillist[0], mlmmjsub, mlmmjunsub, mlmmjsend, mlmmjbounce);
 #endif
 		unlink(mailfile);
-		listcontrol(&fromemails, listdir, recipextra,
+		listcontrol(efrom, &fromemails, listdir, recipextra,
 			    mlmmjsub, mlmmjunsub, mlmmjsend, mlmmjbounce,
 			    donemailname);
 
 		return EXIT_SUCCESS;
 	}
 
+	myfree(delheaders);
+	unlink(mailfile);
+
 	listaddr = getlistaddr(listdir);
 	alternates = ctrlvalues(listdir, "listaddress");
 
@@ -640,7 +681,6 @@
 						" size limit (%d bytes too big)",
 						donemailname, (st.st_size - maxmailsize));
 				unlink(donemailname);
-				unlink(mailfile);
 				myfree(donemailname);
 				myfree(maxmailsizestr);
 				exit(EXIT_SUCCESS);
@@ -661,13 +701,12 @@
 			myfree(listname);
 			myfree(listfqdn);
 			unlink(donemailname);
-			unlink(mailfile);
 			myfree(donemailname);
 			myfree(maxmailsizestr);
 			execlp(mlmmjsend, mlmmjsend,
 					"-l", "1",
 					"-L", listdir,
-					"-T", fromemails.emaillist[0],
+					"-T", efrom,
 					"-F", fromaddr,
 					"-m", queuefilename, (char *)NULL);
 
@@ -676,48 +715,6 @@
 		}
 	}
 
-	/* discard malformed mail with invalid From: */
-	if(fromemails.emailcount != 1) {
-		for(i = 0; i < fromemails.emailcount; i++)
-			printf("fromemails.emaillist[%d] = %s\n",
-					i, fromemails.emaillist[i]);
-		discardname = concatstr(3, listdir,
-				"/queue/discarded/", randomstr);
-		log_error(LOG_ARGS, "Discarding %s due to invalid From:",
-				mailfile);
-		for(i = 0; i < fromemails.emailcount; i++)
-			log_error(LOG_ARGS, "fromemails.emaillist[%d] = %s\n",
-					i, fromemails.emaillist[i]);
-		rename(mailfile, discardname);
-		unlink(donemailname);
-		myfree(donemailname);
-		myfree(discardname);
-		myfree(randomstr);
-		/* TODO: free emailstructs */
-		exit(EXIT_SUCCESS);
-	}
-
-	myfree(delheaders);
-
-	if(strcmp(efrom, "") == 0) { /* don't send mails with <> in From
-					     to the list */
-		discardname = concatstr(3, listdir,
-				"/queue/discarded/",
-				randomstr);
-		errno = 0;
-		log_error(LOG_ARGS, "Discarding %s due to missing envelope"
-				" from address", mailfile);
-		rename(mailfile, discardname);
-		unlink(donemailname);
-		myfree(donemailname);
-		myfree(discardname);
-		myfree(randomstr);
-		/* TODO: free emailstructs */
-		exit(EXIT_SUCCESS);
-	}
-
-	unlink(mailfile);
-
 	addrtocc = !(statctrl(listdir, "tocc"));
 	if(addrtocc) {
 		for(i = 0; i < toemails.emailcount; i++) {
@@ -751,11 +748,11 @@
 		/* Don't send a mail about denial to the list, but silently
 		 * discard and exit. Also don't in case of it being turned off
 		 */
-		if ((strcasecmp(listaddr, fromemails.emaillist[0]) == 0) ||
+		if ((strcasecmp(listaddr, efrom) == 0) ||
 				notoccdenymails) {
 			log_error(LOG_ARGS, "Discarding %s because list"
 					" address was not in To: or Cc:,"
-					" and From: was the list or"
+					" and Envelope-from: was the list or"
 					" notoccdenymails was set",
 					mailfile);
 			myfree(listaddr);
@@ -780,7 +777,7 @@
 		execlp(mlmmjsend, mlmmjsend,
 				"-l", "1",
 				"-L", listdir,
-				"-T", fromemails.emaillist[0],
+				"-T", efrom,
 				"-F", fromaddr,
 				"-m", queuefilename, (char *)NULL);
 
@@ -792,17 +789,17 @@
 	if(subonlypost) {
 		/* Don't send a mail about denial to the list, but silently
 		 * discard and exit. */
-		if (strcasecmp(listaddr, fromemails.emaillist[0]) == 0) {
+		if (strcasecmp(listaddr, efrom) == 0) {
 			log_error(LOG_ARGS, "Discarding %s because"
-					" subonlypost was set and From: was"
-					" the list address",
+					" subonlypost was set and Envelope-from:"
+					" was the list address",
 					mailfile);
 			myfree(listaddr);
 			unlink(donemailname);
 			myfree(donemailname);
 			exit(EXIT_SUCCESS);
 		}
-		if(is_subbed(listdir, fromemails.emaillist[0]) != 0) {
+		if(is_subbed(listdir, efrom) != 0) {
 			modnonsubposts = statctrl(listdir,
 					"modnonsubposts");
 			if(modnonsubposts) {
@@ -826,7 +823,7 @@
 			listdelim = getlistdelim(listdir);
 			listname = genlistname(listaddr);
 			listfqdn = genlistfqdn(listaddr);
-			maildata[1] = fromemails.emaillist[0];
+			maildata[1] = efrom;
 			fromaddr = concatstr(4, listname, listdelim,
 					"bounces-help@", listfqdn);
 			queuefilename = prepstdreply(listdir, "subonlypost",
@@ -841,7 +838,7 @@
 			myfree(donemailname);
 			execlp(mlmmjsend, mlmmjsend,
 					"-l", "1",
-					"-T", fromemails.emaillist[0],
+					"-T", efrom,
 					"-F", fromaddr,
 					"-m", queuefilename, (char *)NULL);
 
@@ -858,14 +855,12 @@
 		enum action accret;
 		/* Don't send a mail about denial to the list, but silently
 		 * discard and exit. Also do this in case it's turned off */
-		accret = do_access(access_rules, &allheaders,
-					fromemails.emaillist[0], listdir);
+		accret = do_access(access_rules, &allheaders, efrom, listdir);
 		if (accret == DENY) {
-			if ((strcasecmp(listaddr, fromemails.emaillist[0]) ==
-						0) || noaccessdenymails) {
+			if ((strcasecmp(listaddr, efrom) == 0) || noaccessdenymails) {
 				log_error(LOG_ARGS, "Discarding %s because"
 						" it was denied by an access"
-						" rule, and From: was the list"
+						" rule, and Envelope-from: was the list"
 						" address or noaccessdenymails"
 						" was set",
 						mailfile);
@@ -894,7 +889,7 @@
 			execlp(mlmmjsend, mlmmjsend,
 					"-l", "1",
 					"-L", listdir,
-					"-T", fromemails.emaillist[0],
+					"-T", efrom,
 					"-F", fromaddr,
 					"-m", queuefilename, (char *)NULL);
 
diff -rud mlmmj-1.2.17.Orig/src/send_help.c mlmmj-1.2.17/src/send_help.c
--- mlmmj-1.2.17.Orig/src/send_help.c	2008-10-30 21:06:36.000000000 +0100
+++ mlmmj-1.2.17/src/send_help.c	2011-09-12 13:50:33.163694316 +0200
@@ -42,7 +42,7 @@
 #include "prepstdreply.h"
 #include "memory.h"
 
-void send_help(const char *listdir, const char *emailaddr,
+void send_help(const char *listdir, const char* efrom, const char *emailaddr,
 	       const char *mlmmjsend, const char *name, const char *textfile)
 {
 	char *queuefilename, *listaddr, *listdelim, *listname, *listfqdn;
@@ -70,7 +70,7 @@
 	execlp(mlmmjsend, mlmmjsend,
 				"-l", "1",
 				"-L", listdir,
-				"-T", emailaddr,
+				"-T", efrom,
 				"-F", fromaddr,
 				"-m", queuefilename, (char *)NULL);
 

