-.\"
+.TH SEND %manext1% 2017-05-11 "%nmhversion%"
+.
.\" %nmhwarning%
-.\"
-.TH SEND %manext1% "December 22, 2013" "%nmhversion%"
+.
.SH NAME
-send \- send a message
+send \- send an nmh message
.SH SYNOPSIS
.HP 5
.na
.B send
+.RB [ \-help ]
+.RB [ \-version ]
.RB [ \-alias
.IR aliasfile ]
.RB [ \-draft ]
.RB [ \-watch " | " \-nowatch ]
.RB [ \-mts
.IR smtp " | " sendmail/smtp " | " sendmail/pipe ]
+.RB [ \-sendmail
+.IR program ]
.RB [ \-server
.IR servername ]
.RB [ \-port
.IR port-name/number ]
.RB [ \-sasl ]
.RB [ \-nosasl ]
-.RB [ \-saslmaxssf
-.IR ssf ]
.RB [ \-saslmech
.IR mechanism ]
+.RB [ \-authservice
+.IR service ]
.RB [ \-snoop ]
.RB [ \-user
.IR username ]
.RB [ \-tls ]
.RB [ \-initialtls ]
.RB [ \-notls ]
+.RB [ \-certverify ]
+.RB [ \-nocertverify ]
.RB [ \-width
.IR columns ]
.RB [ file
\&...]
-.RB [ \-version ]
-.RB [ \-help ]
-.RB [ \-attach
-.IR header-field-name ]
-.RB [ \-noattach ]
-.RB [ \-attachformat
-.IR 0 " | " 1 " | " 2 ]
.ad
.SH DESCRIPTION
-.B Send
+.B send
will cause each of the specified files to be delivered
to each of the destinations in the \*(lqTo:\*(rq, \*(lqcc:\*(rq,
\*(lqBcc:\*(rq, \*(lqDcc:\*(rq, and \*(lqFcc:\*(rq fields of the message. If
.B send
-is re\-distributing a message, as invoked from
+is re-distributing a message, as invoked from
.BR dist ,
then the
corresponding \*(lqResent\-xxx\*(rq fields are examined instead.
are actually performed by
.BR post .
.PP
-By default the draft is scanned for a header named
-.IR Nmh-Attachment .
+Before
+.B send
+gives the message to
+.B post
+for delivery, the message is processed by
+.B mhbuild
+to perform any necessary MIME encoding of the outgoing message. This
+can be changed by the
+.I buildmimeproc
+profile component.
+.B mhbuild
+is invoked with the
+.B \-auto
+switch, so
+.B mhbuild
+directives are not processed by default. See
+.IR mhbuild (1)
+for more information.
+.PP
+.B mhbuild
+will scan the message draft for a header named
+.IR Attach .
The draft is converted to a MIME message if one or more matches are found.
-This conversion occurs before all other processing. The header name
-can be changed with the
-.B \-attach
-option. This behavior can be disabled completely with the
-.B \-noattach
-option. The
-.B whatnow
-man page describes the user interface for managing MIME attachments via
+This conversion occurs before all other processing.
+.IR whatnow (1)
+describes the user interface for managing MIME attachments via
this mechanism.
.PP
The first part of the MIME message is the draft body if that body contains
any non-blank characters.
-The body of each header field whose name matches the
-.I header-field-name
-is interpreted as a file name, and each file named is included as a separate
+The body of each
+.I Attach
+header field is interpreted as a file name, and each file named is included as a separate
part in the MIME message.
.PP
Determination of the content MIME type inserted into the Content-Type
installation was configured. If a program, such as
.B file
with a
-.B --mime
+.B \-\-mime
or
-.B -i
+.B \-i
option, was found that can specify the type of a file as a MIME type
string, then that will be used. To determine if your
.B nmh
.IR mhshow (1)
for more details and example syntax.
.PP
-Each part contains a name attribute that is the last component of the path name.
-A
-.I x-unix-mode
-attribute containing the file mode accompanies each part.
-Finally, a description attribute is generated by running the
-.I file
-command on the file.
-.PP
-The
-.B -attachformat
-option specifies the MIME header field formats: a value of
-.B 0
-includes the
-.I x-unix-mode
-attribute as noted above. A value of
-.BR 1 ,
-the default,
-suppresses that, puts the file name in the
-\*(lqContent-Description\*(rq header, and
-adds a \*(lqContent-Disposition\*(rq header. A value of
-.B 2
-adds the file
-.I modification-date
-parameter to the \*(lqContent-Disposition\*(rq header. You can
-specify one value in your profile, and override it for individual
-messages at the
-.I whatnow
-prompt.
-.PP
-Here are example message part headers, for an attachment, for each of the
-.B -attachformat
-values:
+Each attached MIME part contains a
+\*(lqContent-Description\*(rq header that includes the filename, and
+adds a \*(lqContent-Disposition\*(rq header.
+Here is an example of MIME part headers for an attachment:
.PP
.nf
--attachformat 0:
-Content-Type: text/plain; name="VERSION"; x-unix-mode="0644";
- charset="us-ascii"
-Content-Description: ASCII text
-
--attachformat 1:
Content-Type: text/plain; name="VERSION"; charset="us-ascii"
Content-Description: VERSION
Content-Disposition: attachment; filename="VERSION"
-
--attachformat 2:
-Content-Type: text/plain; name="VERSION"; charset="us-ascii"
-Content-Description: VERSION
-Content-Disposition: attachment; filename="VERSION"; modification-date="Mon, 19 Dec 2005 22:39:51 -0600"
.fi
.PP
+See
+.IR mhbuild (1)
+for explanation of how the Content-Disposition value is selected.
+.PP
If
.B \-push
is specified,
the
.B nmh
draft folder facility. This is an advanced (and highly
-useful) feature. Consult the
+useful) feature. Consult
.IR mh-draft (5)
-man page for more
+for more
information.
.PP
If
tells it how long
to pause between postings.
.PP
-.B Send
+.B send
with no
.I file
argument will query whether the draft
mail transport method is not in use, its addresses will be used for
delivery, and the \*(lqDcc:\*(rq field will be removed from the message. The
blind recipients will receive the same message sent to the sighted
-recipients. *WARNING* Recipients listed in the \*(lqDcc:\*(rq field receive no
+recipients. *WARNING* Recipients listed in the \*(lqDcc:\*(rq field receive no
explicit indication that they have received a \*(lqblind copy\*(rq.
This can cause blind recipients to
inadvertently reply to all of the sighted recipients of the
.B \-filter
.I filterfile
is specified, then this copy is filtered
-(re\-formatted) by
+(re-formatted) by
.B mhl
prior to being sent to the blind recipients.
Alternately, if you specify the
.PP
If
.B send
-is re\-distributing a message (when invoked by
+is re-distributing a message (when invoked by
.BR dist ),
then \*(lqResent\-\*(rq will be prepended to each of these
fields: \*(lqFrom:\*(rq, \*(lqDate:\*(rq, and \*(lqMessage\-ID:\*(rq.
.PP
If a message with multiple \*(lqFrom:\*(rq
addresses does
-.B NOT
+.I not
include a \*(lqSender:\*(rq field but does include an \*(lqEnvelope\-From:\*(rq
field, the \*(lqEnvelope\-From:\*(rq field will be used to construct
a \*(lqSender:\*(rq field.
.PP
-When using SMTP for mail submission, the envelope\-from used for the SMTP
+When using SMTP for mail submission, the envelope-from used for the SMTP
transaction is derived from the \*(lqEnvelope\-From:\*(rq field.
If no \*(lqEnvelope\-From:\*(rq field is present, the \*(lqSender:\*(rq
field is used. If neither the \*(lqEnvelope\-From:\*(rq nor the
the appended fields and field reformatting. The \*(lqFcc:\*(rq fields
will be removed from all outgoing copies of the message.
.PP
+Beware that if an \*(lqFcc:\*(rq with one or more folders is present
+but none of the folders exist, and the default
+.I fileproc
+and
+.I postproc
+are in use, then
+.B refile
+will prompt the user to create the folder(s) if
+.B \-push
+is not specified. If all responses are negative, or creation of each folder
+fails, or
+.B \-push
+is specified, the message will not be copied to any folder and will be
+removed by
+.BR post .
+With the default
+.B refile
+switches, the message draft will be renamed according to the specification
+of its
+.B \-nolink
+switch.
+.PP
By using the
.B \-width
.I columns
as to how long it should make header lines containing addresses.
.PP
The mail transport system default is provided in
-.I %etcdir%/mts.conf
-but can be overriiden here with the
+.I %nmhetcdir%/mts.conf
+but can be overridden here with the
.B \-mts
switch.
.PP
+If nmh is using as its mail transport system
+.BR sendmail/pipe ,
+the
+.B \-sendmail
+switch can be used to override the default
+.B sendmail
+program.
+.PP
If nmh is using the SMTP MTA, the
.B \-server
and the
.B \-port
switches can be used to override the default mail server (defined by the
-.I %etcdir%/mts.conf
-.RI servers
+.I %nmhetcdir%/mts.conf
+.I servers
entry). The
.B \-snoop
switch can be used to view the SMTP transaction. (Beware that the
SMTP transaction may contain authentication information either in
-plaintext or easily decoded base64.)
+plaintext or easily decoded base64.) If
+.B \-sasl \-saslmech xoauth2
+is used, the HTTP transaction is also shown.
.PP
If
.B nmh
SASL mechanism used, this may require an additional password prompt from the
user (but the
.I netrc
-file can be used to store this password, as described in the
-mh-profile(5) man page). The
+file can be used to store this password, as described in
+.IR mh-profile (5).
+The
.B \-saslmech
switch can be used to select a particular SASL mechanism,
and the
.B \-user
switch can be used to select a authorization userid to provide to SASL
-other than the default. The credentials profile entry in the
-mh_profile(5) man page describes the ways to supply a username and
+other than the default. The credentials profile entry in
+.IR mh\-profile (5)
+describes the ways to supply a username and
password.
.PP
If SASL authentication is successful,
-.BR nmh
+nmh
will attempt to negotiate a security layer for session encryption.
Encrypted data is labelled with `(encrypted)' and `(decrypted)' when
viewing the SMTP transaction with the
.B \-snoop
-switch. The
-.B \-saslmaxssf
-switch can be used to select the maximum value of the Security Strength Factor.
-This is an integer value and the exact meaning of this value depends on the
-underlying SASL mechanism. A value of 0 disables encryption.
+switch; see
+.IR post (8)'s
+description of
+.B \-snoop
+for its other features.
+.PP
+If
+.B nmh
+has been compiled with OAuth support, the
+.B \-sasl
+and
+.B \-saslmech xoauth2
+switches will enable OAuth authentication. The
+.B \-user
+switch must be used, and the
+.I username
+must be an email address the user has for the service, which must
+be specified with the
+.B \-authservice
+.I service
+switch. Before using OAuth authentication, the user must authorize nmh by
+running
+.B mhlogin
+and grant authorization to that account. See
+.IR mhlogin (1)
+for more details.
.PP
If
.B nmh
will negotiate TLS immediately after the connection has
taken place, before any SMTP commands are sent or received. Encrypted data
is labelled with `(tls-encrypted)' and
-`(tls-decrypted)' when viewing the SMTP transction with the
+`(tls-decrypted)' when viewing the SMTP transaction with the
.B \-snoop
-switch.
+switch; see
+.IR post (8)'s
+description of
+.B \-snoop
+for its other features.
The
.B \-notls
switch will disable all attempts to negotiate TLS.
.PP
+If port 465 is specified and none of the TLS switches were enabled,
+.B \-initialtls
+will be implied if TLS support was compiled in. Though port 465 for
+SMTPS (SMTP over SSL) was deregistered by IANA in 1998, it is still
+used for that service.
+.PP
+When using TLS the default is to verify the remote certificate and SubjectName
+against the local trusted certificate store. This can be controlled by
+the
+.B \-certverify
+and
+.B \-nocertverify
+switches. See your OpenSSL documentation for more information on certificate
+verification.
+.PP
The files specified by the profile entry \*(lqAliasfile:\*(rq and any
additional alias files given by the
.B \-alias
See
.IR mh\-alias (5)
for more information.
+.SS Selection based on sender address: sendfrom
+One or more
+.I sendfrom
+profile components can be used to select a mail server address, mail server
+port, or any other switch that can be supplied to
+.BR post .
+It works by first looking at the sender address and domain name in the
+message draft, as described below.
+It then looks for a corresponding profile entry, which contains the
+.B post
+switches.
+To enable, add profile entries of the form:
+.PP
+.RS 5
+.RI sendfrom- "address/domain name" : " post switches"
+.RE
+.PP
+The email address is extracted from the Envelope-From: header, if not blank,
+the Sender: header, or the From: header line in the message draft.
+Multiple profile entries, with different email addresses or domain names, are
+supported.
+This allows different switches to
+.BR post ,
+such as -user, to be associated with different email addresses.
+If a domain name is used, it matches all users in that domain.
+.PP
+Here is an example profile entry using OAuth for an account hosted by gmail:
+.PP
+.nf
+.RS 5
+sendfrom-gmail_address@example.com: -sasl -saslmech xoauth2
+.RS 5
+-authservice gmail -tls -server smtp.gmail.com
+-user gmail_login@example.com
+.RE
+.RE
+.fi
+.PP
+(Indentation indicates a continued line, as supported in MH profiles.)
+The username need not be the same as the sender address, which was extracted
+from the appropriate header line as noted above.
+.PP
+Here are example profile entries that use an nmh credentials file:
+.PP
+.nf
+.RS 5
+credentials: file:nmhcreds
+sendfrom-sendgrid_address@example.com: -sasl -tls
+.RS 5
+-server smtp.sendgrid.net
+.RE
+sendfrom-outbound.att.net: -sasl -initialtls
+.RS 5
+-server outbound.att.net -port 465
+.RE
+sendfrom-fastmail.com: -initialtls -sasl -saslmech LOGIN
+.RS 5
+-server smtps-proxy.messagingengine.com -port 80
+.RE
+.RE
+.fi
+.PP
+where nmhcreds is in the user's nmh directory (from the Path profile component)
+and contains:
+.PP
+.nf
+.RS 5
+machine smtp.sendgrid.net
+.RS 5
+login sendgrid_login@example.com
+password ********
+.RE
+machine outbound.att.net
+.RS 5
+login att_login@example.com
+password ********
+.RE
+machine smtps-proxy.messagingengine.com
+.RS 5
+login fastmail_login@example.com
+password ********
+.RE
+.RE
+.fi
+.PP
+For more information on authentication to mail servers, see
+.IR mhlogin (1)
+for OAuth services, and
+.IR mh-profile (5)
+for login credentials.
+.PP
.SH FILES
.fc ^ ~
.nf
-.ta \w'%etcdir%/ExtraBigFileName 'u
-^$HOME/\&.mh\(ruprofile~^The user profile
+.ta \w'%nmhetcdir%/ExtraBigFileName 'u
+^$HOME/.mh_profile~^The user profile
.fi
.SH "PROFILE COMPONENTS"
.fc ^ ~
.ta 2.4i
.ta \w'ExtraBigProfileName 'u
^Path:~^To determine the user's nmh directory
-^Draft\-Folder:~^To find the default draft\-folder
+^Draft\-Folder:~^To find the default draft-folder
^Aliasfile:~^For a default alias file
^Signature:~^To determine the user's mail signature
^mailproc:~^Program to post failure notices
^postproc:~^Program to post the message
+^sendfrom-address:~^Switches to post for sender address
+^sendfrom-domain:~^Switches to post for sender domain name
.fi
.SH "SEE ALSO"
.IR comp (1),
.IR dist (1),
.IR file (1),
.IR forw (1),
+.IR mhbuild (1),
.IR mhparam (1),
+.IR mhlogin (1),
+.IR refile (1),
.IR repl (1),
.IR whatnow (1),
.IR mh\-alias (5),
.IR post (8)
.SH DEFAULTS
.nf
-.RB ` file "' defaults to <mh\-dir>/draft"
-.RB ` \-alias "' defaults to %etcdir%/MailAliases"
+.RB ` file "' defaults to <mh-dir>/draft"
+.RB ` \-alias "' defaults to %nmhetcdir%/MailAliases"
.RB ` \-nodraftfolder '
.RB ` \-nofilter '
.RB ` \-format '
.RB ` \-noverbose '
.RB ` \-nowatch '
.RB ` "\-width\ 72" '
-.RB ` "\-attach\ Nmh-Attachment" '
-.RB ` "\-attachformat\ 1" '
+.RB ` \-certverify '
.fi
.SH CONTEXT
None