#define FCCS 10 /* max number of fccs allowed */
+/* In the following array of structures, the numeric second field of the
+ structures (minchars) is apparently used like this:
+
+ -# : Switch can be abbreviated to # characters; switch hidden in -help.
+ 0 : Switch can't be abbreviated; switch shown in -help.
+ # : Switch can be abbreviated to # characters; switch shown in -help. */
+
static struct swit switches[] = {
#define ALIASW 0
{ "alias aliasfile", 0 },
#define VERSIONSW 20
{ "version", 0 },
#define HELPSW 21
- { "help", 4 },
+ { "help", 0 },
#define BITSTUFFSW 22
{ "dashstuffing", -12 }, /* should we dashstuff BCC messages? */
#define NBITSTUFFSW 23
static char *partno = NULL;
static int queued = 0;
+extern int MMailids;
+
/*
* static prototypes
*/
for (grp = 0, mp = tmpaddrs.m_next; mp; mp = np)
if (mp->m_nohost) { /* also used to test (hdr->flags & HTRY) */
- pp = akvalue (mp->m_mbox);
+ /* The address doesn't include a host, so it might be an alias. */
+ pp = akvalue (mp->m_mbox); /* do mh alias substitution */
qp = akvisible () ? mp->m_mbox : "";
np = mp;
if (np->m_gname)
badadr++;
continue;
}
+
+ if (MMailids && ((msgstate == RESENT)
+ ? (hdr->set & MRFM)
+ : (hdr->set & MFRM)))
+ /* The user manually specified a [Resent-]From: address in
+ their draft and mts.conf turned on "mmailid", so we'll
+ set things up to use the actual email address embedded in
+ the draft [Resent-]From: (after alias substitution, and
+ without the GECOS full name or angle brackets) as the
+ envelope From:. */
+ strncpy(from, auxformat(mp, 0), sizeof(from) - 1);
+
if (hdr->flags & HBCC)
mp->m_bcc++;
if (np->m_ingrp)
mnfree (mp);
}
else {
+ /* Address includes a host, so no alias substitution is needed. */
+ if (MMailids && ((msgstate == RESENT)
+ ? (hdr->set & MRFM)
+ : (hdr->set & MFRM)))
+ /* The user manually specified a [Resent-]From: address in their
+ draft and mts.conf turned on "mmailid", so we'll set things
+ up to use the actual email address embedded in the draft
+ [Resent-]From: (without the GECOS full name or angle
+ brackets) as the envelope From:. */
+ strncpy(from, auxformat(mp, 0), sizeof(from) - 1);
+
if (hdr->flags & HBCC)
mp->m_bcc++;
if (mp->m_gname)
if (msgid)
fprintf (out, "Message-ID: <%d.%ld@%s>\n",
(int) getpid (), (long) tclock, LocalName ());
- if (msgflags & MFRM)
- fprintf (out, "Sender: %s\n", from);
+ if (msgflags & MFRM) {
+ /* There was already a From: in the draft. Don't add one. */
+ if (!MMailids)
+ /* mts.conf didn't turn on mmailid, so we'll reveal the
+ user's actual account@thismachine address in a Sender:
+ header (and use it as the envelope From: later). */
+ fprintf (out, "Sender: %s\n", from);
+ }
else
+ /* Construct a From: header. */
fprintf (out, "From: %s\n", signature);
if (whomsw)
break;
if (msgid)
fprintf (out, "Resent-Message-ID: <%d.%ld@%s>\n",
(int) getpid (), (long) tclock, LocalName ());
- if (msgflags & MRFM)
- fprintf (out, "Resent-Sender: %s\n", from);
+ if (msgflags & MRFM) {
+ /* There was already a Resent-From: in draft. Don't add one. */
+ if (!MMailids)
+ /* mts.conf didn't turn on mmailid, so we'll reveal the
+ user's actual account@thismachine address in a
+ Resent-Sender: header (and use it as the envelope From:
+ later). */
+ fprintf (out, "Resent-Sender: %s\n", from);
+ }
else
+ /* Construct a Resent-From: header. */
fprintf (out, "Resent-From: %s\n", signature);
if (whomsw)
break;