Merged /projects/print2013/en_US.ISO8859-1:r40693-40726 Merged /projects/ISBN_1-57176-407-0/en_US.ISO8859-1:r40727-41455, 41457-41469,41472-41477,41479-41513,41515-41521,41523-41577, 41579-41581,41583-42013 Notes: This merge entirely excludes the en_US/books/handbook/ppp-and-slip/ changes. They will need to be looked at a bit more closely. Note to translators: I am very, very sorry. There was no *clean* way to merge this as separate commits. Trust me, I tried. The revision logs for the ISBN branch should provide some insight to what content has changed. I am more than happy to help out here. Sorry :( Approved by: doceng (implicit)
2103 lines
74 KiB
XML
2103 lines
74 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!--
|
|
The FreeBSD Documentation Project
|
|
|
|
$FreeBSD$
|
|
-->
|
|
|
|
<chapter id="mail">
|
|
<chapterinfo>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Bill</firstname>
|
|
<surname>Lloyd</surname>
|
|
<contrib>Original work by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Jim</firstname>
|
|
<surname>Mock</surname>
|
|
<contrib>Rewritten by </contrib>
|
|
<!-- 2 Dec 1999 -->
|
|
</author>
|
|
</authorgroup>
|
|
</chapterinfo>
|
|
|
|
<title>Electronic Mail</title>
|
|
|
|
<sect1 id="mail-synopsis">
|
|
<title>Synopsis</title>
|
|
|
|
<indexterm><primary>email</primary></indexterm>
|
|
|
|
<para><quote>Electronic Mail</quote>, better known as email, is
|
|
one of the most widely used forms of communication today.
|
|
This chapter provides a basic introduction to running a mail
|
|
server on &os;, as well as an introduction to sending and
|
|
receiving email using &os;.
|
|
For more complete coverage of this subject,
|
|
refer to the books listed in
|
|
<xref linkend="bibliography"/>.</para>
|
|
|
|
<para>After reading this chapter, you will know:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Which software components are involved in sending and
|
|
receiving electronic mail.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Where basic <application>sendmail</application>
|
|
configuration files are located in &os;.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The difference between remote and local
|
|
mailboxes.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to block spammers from illegally using a mail
|
|
server as a relay.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to install and configure an alternate Mail Transfer
|
|
Agent, replacing
|
|
<application>sendmail</application>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to troubleshoot common mail server problems.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to set up the system to send mail only.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to use mail with a dialup connection.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to configure SMTP authentication for added
|
|
security.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to install and use a Mail User Agent, such as
|
|
<application>mutt</application>, to send and receive
|
|
email.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to download mail from a remote
|
|
<acronym>POP</acronym> or <acronym>IMAP</acronym>
|
|
server.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>How to automatically apply filters and rules to incoming
|
|
email.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Before reading this chapter, you should:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Properly set up a network connection (<xref
|
|
linkend="advanced-networking"/>).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Properly set up the <acronym>DNS</acronym> information
|
|
for a mail host (<xref linkend="network-servers"/>).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Know how to install additional third-party software
|
|
(<xref linkend="ports"/>).</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-using">
|
|
<title>Using Electronic Mail</title>
|
|
|
|
<indexterm><primary>POP</primary></indexterm>
|
|
<indexterm><primary>IMAP</primary></indexterm>
|
|
<indexterm><primary>DNS</primary></indexterm>
|
|
|
|
<para>There are five major parts involved in an email exchange:
|
|
<link linkend="mail-mua">the Mail User Agent
|
|
<acronym>MUA></acronym></link>, <link linkend="mail-mta">the
|
|
Mail Transfer Agent<acronym>MTA</acronym></link>, <link
|
|
linkend="mail-dns"><acronym>DNS</acronym></link>, <link
|
|
linkend="mail-receive">a remote or local mailbox</link>, and
|
|
<link linkend="mail-host">the mail host</link>.</para>
|
|
|
|
<sect2 id="mail-mua">
|
|
<title>The Mail User Agent</title>
|
|
|
|
<para>This includes command line programs such as
|
|
<application>mutt</application>,
|
|
<application>alpine</application>,
|
|
<application>elm</application>, and
|
|
<command>mail</command>, <acronym>GUI</acronym> programs such
|
|
as <application>balsa</application> or
|
|
<application>xfmail</application>, and web mail programs
|
|
which can be accessed from a web browser. User programs pass
|
|
the email transactions to the local <link
|
|
linkend="mail-host"><quote>mail host</quote></link>, either
|
|
by a <link
|
|
linkend="mail-mta"><acronym>MTA</acronym></link>, or by
|
|
delivering it over <acronym>TCP</acronym>.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-mta">
|
|
<title>The Mail Transfer Agent</title>
|
|
|
|
<indexterm>
|
|
<primary>mail server daemons</primary>
|
|
<secondary><application>Sendmail</application></secondary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>mail server daemons</primary>
|
|
<secondary><application>Postfix</application></secondary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>mail server daemons</primary>
|
|
<secondary><application>qmail</application></secondary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary>mail server daemons</primary>
|
|
<secondary><application>Exim</application></secondary>
|
|
</indexterm>
|
|
|
|
<para>&os; ships with <application>Sendmail</application> as the
|
|
default <acronym>MTA</acronym>, but it also supports numerous
|
|
other mail server daemons, including:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><application>Exim</application>;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><application>Postfix</application>;</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><application>qmail</application>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>The <acronym>MTA</acronym> usually has two functions. It
|
|
is responsible for receiving incoming mail as well as
|
|
delivering outgoing mail. It is <emphasis>not</emphasis>
|
|
responsible for the collection of mail using protocols such as
|
|
<acronym>POP</acronym> or <acronym>IMAP</acronym>, nor does it
|
|
allow connecting to local <filename>mbox</filename> or Maildir
|
|
mailboxes. An additional <link
|
|
linkend="mail-receive">daemon</link> may be required for
|
|
these functions.</para>
|
|
|
|
<warning>
|
|
<para>Older versions of <application>Sendmail</application>
|
|
contain serious security issues which may result in an
|
|
attacker gaining local or remote access to the system.
|
|
Run a current version to &os; to avoid these problems.
|
|
Optionally, install an alternative <acronym>MTA</acronym>
|
|
from the <link linkend="ports">&os; Ports
|
|
Collection</link>.</para>
|
|
</warning>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-dns">
|
|
<title>Email and DNS</title>
|
|
|
|
<para>The Domain Name System (<acronym>DNS</acronym>) and its
|
|
daemon <command>named</command> play a large role in the
|
|
delivery of email. In order to deliver mail from one site to
|
|
another, the <acronym>MTA</acronym> will look up the remote
|
|
site in <acronym>DNS</acronym> to determine which host will
|
|
receive mail for the destination. This process also occurs
|
|
when mail is sent from a remote host to the
|
|
<acronym>MTA</acronym>.</para>
|
|
|
|
<indexterm>
|
|
<primary>MX record</primary>
|
|
</indexterm>
|
|
|
|
<para><acronym>DNS</acronym> is responsible for mapping
|
|
hostnames to IP addresses, as well as for storing information
|
|
specific to mail delivery, known as Mail eXchanger
|
|
<acronym>MX</acronym> records. The <acronym>MX</acronym>
|
|
record specifies which host, or hosts, will receive mail for a
|
|
particular domain. If there is no <acronym>MX</acronym>
|
|
record for the hostname or domain, the mail will be delivered
|
|
directly to the host, provided there is an
|
|
<literal>A</literal> record pointing the hostname to the IP
|
|
address.</para>
|
|
|
|
<para>To view the <acronym>MX</acronym> records for a domain,
|
|
specify the type of record using &man.host.1;, as seen in the
|
|
example below:</para>
|
|
|
|
<screen>&prompt.user; <userinput>host -t mx FreeBSD.org</userinput>
|
|
FreeBSD.org mail is handled by 10 mx1.FreeBSD.org</screen>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-receive">
|
|
<title>Receiving Mail</title>
|
|
|
|
<indexterm>
|
|
<primary>email</primary>
|
|
<secondary>receiving</secondary>
|
|
</indexterm>
|
|
|
|
<para>Receiving mail for a domain is done by the mail host.
|
|
It will collect all mail sent to the domain and store it
|
|
either in the default <filename>mbox</filename> or the
|
|
alternative Maildir format, depending on the configuration.
|
|
Once mail has been stored, it may either be read locally using
|
|
a <acronym>MUA</acronym>, or remotely accessed and collected
|
|
using protocols such as <acronym>POP</acronym> or
|
|
<acronym>IMAP</acronym>. In order to read mail locally,
|
|
a <acronym>POP</acronym> or <acronym>IMAP</acronym> server
|
|
does not need to be installed.</para>
|
|
|
|
<sect3 id="pop-and-imap">
|
|
<title>Accessing Remote Mailboxes Using <acronym>POP</acronym>
|
|
and <acronym>IMAP</acronym></title>
|
|
|
|
<indexterm><primary>POP</primary></indexterm>
|
|
<indexterm><primary>IMAP</primary></indexterm>
|
|
<para>To access mailboxes remotely, access to a
|
|
<acronym>POP</acronym> or <acronym>IMAP</acronym> server is
|
|
required. These protocols allow users to connect to their
|
|
mailboxes from remote locations. Though both
|
|
<acronym>POP</acronym> and <acronym>IMAP</acronym> allow
|
|
users to remotely access mailboxes, <acronym>IMAP</acronym>
|
|
offers many advantages, including:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><acronym>IMAP</acronym> can store messages on a
|
|
remote server as well as fetch them.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><acronym>IMAP</acronym> supports concurrent
|
|
updates.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><acronym>IMAP</acronym> can be useful over
|
|
low-speed links as it allows users to fetch the
|
|
structure of messages without downloading them. It can
|
|
also perform tasks such as searching on the server in
|
|
order to minimize data transfer between clients and
|
|
servers.</para>
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
|
|
<para>In order to install a <acronym>POP</acronym> or
|
|
<acronym>IMAP</acronym> server, the following steps should
|
|
be performed:</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Use the Ports Collection to install an
|
|
<acronym>IMAP</acronym> or <acronym>POP</acronym>
|
|
server. The following <acronym>POP</acronym> and
|
|
<acronym>IMAP</acronym> servers are well known:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><filename
|
|
role="package">mail/qpopper</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename
|
|
role="package">mail/teapop</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename
|
|
role="package">mail/imap-uw</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename
|
|
role="package">mail/courier-imap</filename></para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para><filename
|
|
role="package">mail/dovecot2</filename></para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
</step>
|
|
|
|
<step>
|
|
<para>Where required, use the startup script that came
|
|
with the application to load the <acronym>POP</acronym>
|
|
or <acronym>IMAP</acronym> server. Those programs will
|
|
also provide a variable which can be added to
|
|
<filename>/etc/rc.conf</filename> to automate the
|
|
startup of the application's daemon whenever the system
|
|
boots.</para>
|
|
</step>
|
|
</procedure>
|
|
|
|
<warning>
|
|
<para>It should be noted that both <acronym>POP</acronym>
|
|
and <acronym>IMAP</acronym> transmit information,
|
|
including username and password credentials, in
|
|
clear-text. To secure the transmission of information
|
|
across these protocols, consider tunneling sessions over
|
|
&man.ssh.1; (<xref linkend="security-ssh-tunneling"/>) or
|
|
using SSL (<xref linkend="openssl"/>).</para>
|
|
</warning>
|
|
</sect3>
|
|
|
|
<sect3 id="local">
|
|
<title>Accessing Local Mailboxes</title>
|
|
|
|
<para>Mailboxes may be accessed locally by directly using an
|
|
<acronym>MUA</acronym> on the server on which the mailbox
|
|
resides. This can be done using a built-in application
|
|
such as &man.mail.1; or by installing a
|
|
<acronym>MUA</acronym> from the Ports Collection..</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-host">
|
|
<title>The Mail Host</title>
|
|
|
|
<indexterm><primary>mail host</primary></indexterm>
|
|
|
|
<para>The mail host is a server that is responsible for
|
|
delivering and receiving mail for a host, or a network.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="sendmail">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Christopher</firstname>
|
|
<surname>Shumway</surname>
|
|
<contrib>Contributed by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
<title><application>Sendmail</application> Configuration</title>
|
|
|
|
<indexterm>
|
|
<primary><application>Sendmail</application></primary>
|
|
</indexterm>
|
|
|
|
<para>&man.sendmail.8; is the default <acronym>MTA</acronym>
|
|
which is installed with &os;.
|
|
<application>Sendmail</application> accepts mail from
|
|
<acronym>MUA</acronym>s and delivers it to the appropriate
|
|
mailer as defined by its configuration file.
|
|
<application>Sendmail</application> can also accept network
|
|
connections and deliver mail to local mailboxes or to another
|
|
program.</para>
|
|
|
|
<para><application>Sendmail</application> uses the following
|
|
configuration files. This section describes these files in more
|
|
detail.</para>
|
|
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/access</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/aliases</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/local-host-names</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/mailer.conf</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/mailertable</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/sendmail.cf</filename></primary>
|
|
</indexterm>
|
|
<indexterm>
|
|
<primary><filename>/etc/mail/virtusertable</filename></primary>
|
|
</indexterm>
|
|
<informaltable frame="none" pgwide="1">
|
|
<tgroup cols="2">
|
|
<thead>
|
|
<row>
|
|
<entry>Filename</entry>
|
|
<entry>Function</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/access</filename></entry>
|
|
<entry><application>Sendmail</application> access database
|
|
file.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/aliases</filename></entry>
|
|
<entry>Mailbox aliases</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/local-host-names</filename></entry>
|
|
<entry>Lists of hosts <application>Sendmail</application>
|
|
accepts mail for.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/mailer.conf</filename></entry>
|
|
<entry>Mailer program configuration.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/mailertable</filename></entry>
|
|
<entry>Mailer delivery table.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/sendmail.cf</filename></entry>
|
|
<entry><application>Sendmail</application> master
|
|
configuration file.</entry>
|
|
</row>
|
|
|
|
<row>
|
|
<entry>
|
|
<filename>/etc/mail/virtusertable</filename></entry>
|
|
<entry>Virtual users and domain tables.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</informaltable>
|
|
|
|
<sect2>
|
|
<title><filename>/etc/mail/access</filename></title>
|
|
|
|
<para>This database defines which host(s) or IP addresses
|
|
have access to the local mail server and what kind of access
|
|
they have. Hosts can be listed as <option>OK</option>,
|
|
<option>REJECT</option>, or <option>RELAY</option>, or can be
|
|
passed to <application>Sendmail</application>'s error
|
|
handling routine with a given mailer error. Hosts that
|
|
are listed as <option>OK</option>, which is the default
|
|
option, are allowed to send mail to this host as long as the
|
|
mail's final destination is the local machine. Hosts that are
|
|
listed as <option>REJECT</option> are rejected for all mail
|
|
connections. Hosts that are listed as <option>RELAY</option>
|
|
are allowed to send mail for any
|
|
destination using this mail server.</para>
|
|
|
|
<example>
|
|
<title>Configuring the <application>Sendmail</application>
|
|
Access Database</title>
|
|
|
|
<programlisting>cyberspammer.com 550 We do not accept mail from spammers
|
|
FREE.STEALTH.MAILER@ 550 We do not accept mail from spammers
|
|
another.source.of.spam REJECT
|
|
okay.cyberspammer.com OK
|
|
128.32 RELAY</programlisting>
|
|
</example>
|
|
|
|
<para>This example shows five entries. Mail senders that match
|
|
the left side of the table are affected by the action on the
|
|
right side of the table. The first two examples give an error
|
|
code to <application>Sendmail</application>'s error handling
|
|
routine. The message is sent to the remote host when a mail
|
|
matches the left side of the table. The third entry rejects
|
|
mail from a specific host on the Internet,
|
|
<hostid>another.source.of.spam</hostid>. The fourth entry
|
|
accepts mail connections from <hostid
|
|
role="fqdn">okay.cyberspammer.com</hostid>, which is
|
|
more specific than the <hostid
|
|
role="domainname">cyberspammer.com</hostid> line above.
|
|
More specific matches override less exact matches. The last
|
|
entry allows relaying of email from hosts with an IP address
|
|
that begins with <hostid>128.32</hostid>. These hosts can
|
|
send mail through this mail server that is destined for other
|
|
mail servers.</para>
|
|
|
|
<para>Whenever this file is updated, run
|
|
<command>make</command> in <filename
|
|
class="directory">/etc/mail/</filename> to update the
|
|
database.</para>
|
|
|
|
</sect2>
|
|
<sect2>
|
|
<title><filename>/etc/mail/aliases</filename></title>
|
|
|
|
<para>This database contains a list of virtual mailboxes that
|
|
are expanded to other user(s), files, programs, or other
|
|
aliases. Here are a few examples to illustrate the
|
|
file format:</para>
|
|
|
|
<example>
|
|
<title>Mail Aliases</title>
|
|
|
|
<programlisting>root: localuser
|
|
ftp-bugs: joe,eric,paul
|
|
bit.bucket: /dev/null
|
|
procmail: "|/usr/local/bin/procmail"</programlisting>
|
|
</example>
|
|
|
|
<para>The mailbox name on the left side of the colon is expanded
|
|
to the target(s) on the right. The first entry expands the
|
|
mailbox <username>root</username> to the mailbox
|
|
<username>localuser</username>, which is then looked up again
|
|
in the <filename>aliases</filename> database. If no match is
|
|
found, the message is delivered to
|
|
<username>localuser</username>. The second entry shows a
|
|
mail list. Mail to the mailbox <username>ftp-bugs</username>
|
|
is expanded to the three local mailboxes
|
|
<username>joe</username>, <username>eric</username>, and
|
|
<username>paul</username>. A remote mailbox could be
|
|
specified as <email>user@example.com</email>. The third
|
|
entry shows how to write mail to a file, in this case
|
|
<filename>/dev/null</filename>. The last entry demonstrates
|
|
how to send mail to a program,
|
|
<filename>/usr/local/bin/procmail</filename>, through a &unix;
|
|
pipe.</para>
|
|
|
|
<para>Whenever this file is updated, run
|
|
<command>make</command> in <filename
|
|
class="directory">/etc/mail/</filename> to update the
|
|
database.</para>
|
|
</sect2>
|
|
<sect2>
|
|
<title><filename>/etc/mail/local-host-names</filename></title>
|
|
|
|
<para>This is a list of hostnames &man.sendmail.8; is to accept
|
|
as the local host name. Place any domains or hosts that
|
|
<application>Sendmail</application> will receive mail
|
|
for. For example, to configure a mail server to accept mail
|
|
for the domain <hostid role="domainname">example.com</hostid>
|
|
and the host <hostid role="fqdn">mail.example.com</hostid>,
|
|
add these entries to
|
|
<filename>local-host-names</filename>:</para>
|
|
|
|
<programlisting>example.com
|
|
mail.example.com</programlisting>
|
|
|
|
<para>Whenever this file is updated, &man.sendmail.8; needs to be
|
|
restarted so that it will read the changes.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title><filename>/etc/mail/sendmail.cf</filename></title>
|
|
|
|
<para>This is the master configuration file for
|
|
<application>Sendmail</application>. It controls the overall
|
|
behavior of <application>Sendmail</application>, including
|
|
everything from rewriting email addresses to printing rejection
|
|
messages to remote mail servers. Accordingly, this
|
|
configuration file is quite complex. Fortunately, this file
|
|
rarely needs to be changed for standard mail servers.</para>
|
|
|
|
<para>The master <application>Sendmail</application> configuration
|
|
file can be built from &man.m4.1; macros that define the
|
|
features and behavior of <application>Sendmail</application>.
|
|
Refer to
|
|
<filename>/usr/src/contrib/sendmail/cf/README</filename> for
|
|
some of the details.</para>
|
|
|
|
<para>Whenever changes to this file are made,
|
|
<application>Sendmail</application> needs to be restarted for
|
|
the changes to take effect.</para>
|
|
|
|
</sect2>
|
|
<sect2>
|
|
<title><filename>/etc/mail/virtusertable</filename></title>
|
|
|
|
<para>The <filename>virtusertable</filename> maps mail addresses
|
|
for virtual domains and mailboxes to real mailboxes. These
|
|
mailboxes can be local, remote, aliases defined in
|
|
<filename>/etc/mail/aliases</filename>, or files.</para>
|
|
|
|
<example>
|
|
<title>Example Virtual Domain Mail Map</title>
|
|
|
|
<programlisting>root@example.com root
|
|
postmaster@example.com postmaster@noc.example.net
|
|
@example.com joe</programlisting>
|
|
</example>
|
|
|
|
<para>The above example contains a mapping for the domain
|
|
<hostid role="domainname">example.com</hostid>. This file
|
|
is processed in a first match order. The first item maps
|
|
<email>root@example.com</email> to the local mailbox
|
|
<username>root</username>. The second entry maps
|
|
<email>postmaster@example.com</email> to the mailbox
|
|
<username>postmaster</username> on the host <hostid
|
|
role="fqdn">noc.example.net</hostid>. Finally, if
|
|
nothing from <hostid role="domainname">example.com</hostid>
|
|
has matched so far, it will match the last mapping, which
|
|
matches every other mail message addressed to someone at
|
|
<hostid role="domainname">example.com</hostid> to the local
|
|
mailbox <username>joe</username>.</para>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-changingmta">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Andrew</firstname>
|
|
<surname>Boothman</surname>
|
|
<contrib>Written by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Gregory</firstname>
|
|
<surname>Neil Shapiro</surname>
|
|
<contrib>Information taken from emails written
|
|
by</contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
<title>Changing the Mail Transfer Agent</title>
|
|
|
|
<indexterm>
|
|
<primary>email</primary>
|
|
<secondary>change mta</secondary>
|
|
</indexterm>
|
|
|
|
<para>&os; comes with <application>Sendmail</application> already
|
|
installed as the <acronym>MTA</acronym> which is in charge of
|
|
outgoing and incoming mail.</para>
|
|
|
|
<para>However, the system administrator can change the system's
|
|
<acronym>MTA</acronym>. The reasons for doing so range from
|
|
wanting to try out another <acronym>MTA</acronym> to needing a
|
|
specific feature or package which relies on another
|
|
<acronym>MTA</acronym>. Whatever the reason, &os; makes it
|
|
easy to make the change.</para>
|
|
|
|
<sect2>
|
|
<title>Install a New <acronym>MTA</acronym></title>
|
|
|
|
<para>A wide choice of <acronym>MTA</acronym>s is available
|
|
from the <literal>mail</literal> category of the <link
|
|
linkend="ports">&os; Ports Collection</link>.</para>
|
|
|
|
<para>Once a new <acronym>MTA</acronym> is installed, configure
|
|
the new software and decide if it really fulfills your needs
|
|
before replacing <application>Sendmail</application>.</para>
|
|
|
|
<para>Refer to the new chosen <acronym>MTA</acronym>'s
|
|
documentation for information on how to configure the
|
|
software.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-disable-sendmail">
|
|
<title>Disable <application>Sendmail</application></title>
|
|
|
|
<warning>
|
|
<para>If <application>Sendmail</application>'s outgoing mail
|
|
service is disabled, it is important that it is replaced
|
|
with an alternative mail delivery system. Otherwise, system
|
|
functions such as &man.periodic.8; will be unable to deliver
|
|
their results by email. Many parts of the system expect a
|
|
functional <acronym>MTA</acronym>. If applications continue
|
|
to use <application>Sendmail</application>'s binaries to try
|
|
to send email they are disabled, mail could go into an
|
|
inactive <application>Sendmail</application> queue, and
|
|
never be delivered.</para>
|
|
</warning>
|
|
|
|
<para>In order to completely disable
|
|
<application>Sendmail</application>, including the outgoing
|
|
mail service, add or edit the following lines in
|
|
<filename>/etc/rc.conf</filename>:</para>
|
|
|
|
<programlisting>sendmail_enable="NO"
|
|
sendmail_submit_enable="NO"
|
|
sendmail_outbound_enable="NO"
|
|
sendmail_msp_queue_enable="NO"</programlisting>
|
|
|
|
<para>To only disable <application>Sendmail</application>'s
|
|
incoming mail service, set</para>
|
|
|
|
<programlisting>sendmail_enable="NO"</programlisting>
|
|
|
|
<para>in <filename>/etc/rc.conf</filename>. More information
|
|
on <application>Sendmail</application>'s startup options
|
|
is available in &man.rc.sendmail.8;.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Running the New <acronym>MTA</acronym> on Boot</title>
|
|
|
|
<para>The new <acronym>MTA</acronym> can be started during
|
|
boot by adding a configuration line to
|
|
<filename>/etc/rc.conf</filename>. This example enables the
|
|
Postfix <acronym>MTA</acronym>:</para>
|
|
|
|
<screen>&prompt.root; echo
|
|
'<replaceable>postfix</replaceable>_enable=<quote>YES</quote>'
|
|
>> /etc/rc.conf</screen>
|
|
|
|
<para>The specified <acronym>MTA</acronym> will now be
|
|
automatically started during boot.</para>
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Replacing <application>Sendmail</application> as
|
|
the System's Default Mailer</title>
|
|
|
|
<para><application>Sendmail</application> is so ubiquitous as
|
|
standard software on &unix; systems that some software assumes
|
|
it is already installed and configured. For this reason, many
|
|
alternative <acronym>MTA</acronym>s provide their own
|
|
compatible implementations of the
|
|
<application>Sendmail</application> command-line interface in
|
|
order to facilitate using them as <quote>drop-in</quote>
|
|
replacements for <application>Sendmail</application>.</para>
|
|
|
|
<para>When using an alternative <acronym>MTA</acronym>,
|
|
make sure that software trying to execute standard
|
|
<application>Sendmail</application> binaries, such as
|
|
<filename>/usr/bin/sendmail</filename>, actually execute
|
|
the chosen mailer instead. Fortunately, &os; provides a
|
|
system called &man.mailwrapper.8; for this purpose.</para>
|
|
|
|
<para>When <application>Sendmail</application> is operating
|
|
as installed,
|
|
<filename>/etc/mail/mailer.conf</filename> will look like
|
|
this:</para>
|
|
|
|
<programlisting>sendmail /usr/libexec/sendmail/sendmail
|
|
send-mail /usr/libexec/sendmail/sendmail
|
|
mailq /usr/libexec/sendmail/sendmail
|
|
newaliases /usr/libexec/sendmail/sendmail
|
|
hoststat /usr/libexec/sendmail/sendmail
|
|
purgestat /usr/libexec/sendmail/sendmail</programlisting>
|
|
|
|
<para>When any of the commands listed on the left are run,
|
|
the system actually executes the associated command shown on
|
|
the right instead. This system makes it easy to change what
|
|
binaries are executed when these default
|
|
<filename>Sendmail</filename> functions are invoked.</para>
|
|
|
|
<para>As an example, to run
|
|
<filename>/usr/local/supermailer/bin/sendmail-compat</filename>
|
|
instead of <application>Sendmail</application>, specify the
|
|
paths to the installed applications in
|
|
<filename>/etc/mail/mailer.conf</filename>:</para>
|
|
|
|
<programlisting>sendmail /usr/local/supermailer/bin/sendmail-compat
|
|
send-mail /usr/local/supermailer/bin/sendmail-compat
|
|
mailq /usr/local/supermailer/bin/mailq-compat
|
|
newaliases /usr/local/supermailer/bin/newaliases-compat
|
|
hoststat /usr/local/supermailer/bin/hoststat-compat
|
|
purgestat /usr/local/supermailer/bin/purgestat-compat</programlisting>
|
|
|
|
</sect2>
|
|
|
|
<sect2>
|
|
<title>Finishing</title>
|
|
|
|
<para>Once everything is configured, either kill the
|
|
unneeded <application>sendmail</application> processes and
|
|
start the processes belonging to the new software, or
|
|
reboot. Rebooting provides the opportunity to ensure that
|
|
the system is correctly configured to start the new
|
|
<acronym>MTA</acronym> automatically on boot.</para>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-trouble">
|
|
<title>Troubleshooting</title>
|
|
|
|
<indexterm>
|
|
<primary>email</primary>
|
|
<secondary>troubleshooting</secondary>
|
|
</indexterm>
|
|
|
|
<qandaset>
|
|
<qandaentry>
|
|
<question>
|
|
<para>Why do I have to use the FQDN for hosts on my
|
|
site?</para>
|
|
</question>
|
|
|
|
<answer>
|
|
<para>The host may actually be in a different domain.
|
|
For example, in order for a host in <hostid
|
|
role="fqdn">foo.bar.edu</hostid> to reach a host
|
|
called <hostid>mumble</hostid> in the <hostid
|
|
role="domainname">bar.edu</hostid> domain, refer to
|
|
it by the Fully-Qualified Domain Name
|
|
<acronym>FQDN</acronym>, <hostid
|
|
role="fqdn">mumble.bar.edu</hostid>, instead of just
|
|
<hostid>mumble</hostid>.</para>
|
|
|
|
<indexterm><primary>BIND</primary></indexterm>
|
|
<para>This is because the version of
|
|
<application>BIND</application> which ships with
|
|
&os; no longer provides default abbreviations
|
|
for non-FQDNs other than the local domain. An
|
|
unqualified host such as
|
|
<hostid>mumble</hostid> must either be found as
|
|
<hostid role="fqdn">mumble.foo.bar.edu</hostid>,
|
|
or it will be searched for in the root domain.</para>
|
|
|
|
<para>In older versions of
|
|
<application>BIND</application>,
|
|
the search continued across <hostid
|
|
role="domainname">mumble.bar.edu</hostid>, and
|
|
<hostid role="domainname">mumble.edu</hostid>. RFC
|
|
1535 details why this is considered bad practice or
|
|
even a security hole.</para>
|
|
|
|
<para>As a good workaround, place the line:</para>
|
|
|
|
<programlisting>search foo.bar.edu bar.edu</programlisting>
|
|
|
|
<para>instead of the previous:</para>
|
|
|
|
<programlisting>domain foo.bar.edu</programlisting>
|
|
|
|
<para>into <filename>/etc/resolv.conf</filename>.
|
|
However, make sure that the search order does not go
|
|
beyond the <quote>boundary between local and public
|
|
administration</quote>, as RFC 1535 calls it.</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry>
|
|
<question>
|
|
<para><application>Sendmail</application> says
|
|
<errorname>mail loops back to myself</errorname>.</para>
|
|
</question>
|
|
|
|
<answer>
|
|
<para>This is answered in the <ulink
|
|
url="http://www.sendmail.org/faq/">Sendmail
|
|
FAQ</ulink> as follows. This FAQ is recommended reading
|
|
when <quote>tweaking</quote> the mail setup.</para>
|
|
|
|
<programlisting>I'm getting these error messages:
|
|
|
|
553 MX list for domain.net points back to relay.domain.net
|
|
554 <user@domain.net>... Local configuration error
|
|
|
|
How can I solve this problem?
|
|
|
|
You have asked mail to the domain (e.g., domain.net) to be
|
|
forwarded to a specific host (in this case, relay.domain.net)
|
|
by using an MX record, but the relay machine does not recognize
|
|
itself as domain.net. Add domain.net to /etc/mail/local-host-names
|
|
[known as /etc/sendmail.cw prior to version 8.10]
|
|
(if you are using FEATURE(use_cw_file)) or add <quote>Cw domain.net</quote>
|
|
to /etc/mail/sendmail.cf.</programlisting>
|
|
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry>
|
|
<question>
|
|
<para>How can I run a mail server on a dial-up PPP
|
|
host?</para>
|
|
</question>
|
|
|
|
<answer>
|
|
<para>Connect to a &os; mail gateway on the LAN. The PPP
|
|
connection is non-dedicated.</para>
|
|
|
|
<indexterm>
|
|
<primary>MX record</primary>
|
|
</indexterm>
|
|
|
|
<para>One way to do this is to get a full-time Internet server
|
|
to provide secondary <acronym>MX</acronym> services for the
|
|
domain. In this example, the domain is <hostid
|
|
role="domainname">example.com</hostid> and the ISP has
|
|
configured <hostid
|
|
role="domainname">example.net</hostid> to provide
|
|
secondary <acronym>MX</acronym> services to the
|
|
domain:</para>
|
|
|
|
<programlisting>example.com. MX 10 example.com.
|
|
MX 20 example.net.</programlisting>
|
|
|
|
<para>Only one host should be specified as the final
|
|
recipient. For <application>Sendmail</application>, add
|
|
<literal>Cw example.com</literal> in
|
|
<filename>/etc/mail/sendmail.cf</filename> on
|
|
<hostid role="domainname">example.com</hostid>.</para>
|
|
|
|
<para>When the sending <acronym>MTA</acronym> attempts
|
|
to deliver mail, it will try to connect to the system,
|
|
<hostid role="domainname">example.com</hostid>, over the PPP
|
|
link. This will time out if the destination is offline.
|
|
The <acronym>MTA</acronym> will automatically deliver it to
|
|
the secondary <acronym>MX</acronym> site at the Internet
|
|
Service Provider (<acronym>ISP</acronym>), <hostid
|
|
role="domainname">example.net</hostid>. The secondary
|
|
<acronym>MX</acronym> site will periodically try to connect
|
|
to the primary <acronym>MX</acronym> host, <hostid
|
|
role="domainname">example.com</hostid>.</para>
|
|
|
|
<para>Use something like this as a login
|
|
script:</para>
|
|
|
|
<programlisting>#!/bin/sh
|
|
# Put me in /usr/local/bin/pppmyisp
|
|
( sleep 60 ; /usr/sbin/sendmail -q ) &
|
|
/usr/sbin/ppp -direct pppmyisp</programlisting>
|
|
|
|
<para>When creating a separate login script for users, instead
|
|
use <command>sendmail -qRexample.com</command> in the script
|
|
above. This will force all mail in the queue for <hostid
|
|
role="domainname">example.com</hostid> to be processed
|
|
immediately.</para>
|
|
|
|
<para>A further refinement of the situation can be seen from
|
|
this example from the &a.isp;:</para>
|
|
|
|
<programlisting>> we provide the secondary MX for a customer. The customer connects to
|
|
> our services several times a day automatically to get the mails to
|
|
> his primary MX (We do not call his site when a mail for his domains
|
|
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
|
|
> moment he has to stay 30 minutes online to be sure that all mail is
|
|
> gone to the primary MX.
|
|
>
|
|
> Is there a command that would initiate sendmail to send all the mails
|
|
> now? The user has not root-privileges on our machine of course.
|
|
|
|
In the <quote>privacy flags</quote> section of sendmail.cf, there is a
|
|
definition Opgoaway,restrictqrun
|
|
|
|
Remove restrictqrun to allow non-root users to start the queue processing.
|
|
You might also like to rearrange the MXs. We are the 1st MX for our
|
|
customers like this, and we have defined:
|
|
|
|
# If we are the best MX for a host, try directly instead of generating
|
|
# local config error.
|
|
OwTrue
|
|
|
|
That way a remote site will deliver straight to you, without trying
|
|
the customer connection. You then send to your customer. Only works for
|
|
<quote>hosts</quote>, so you need to get your customer to name their mail
|
|
machine <quote>customer.com</quote> as well as
|
|
<quote>hostname.customer.com</quote> in the DNS. Just put an A record in
|
|
the DNS for <quote>customer.com</quote>.</programlisting>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry>
|
|
<question>
|
|
<para>Why do I keep getting <errorname>Relaying
|
|
Denied</errorname> errors when sending mail from other
|
|
hosts?</para>
|
|
</question>
|
|
|
|
<answer>
|
|
<para>In a default &os; installation,
|
|
<application>Sendmail</application> is configured to only
|
|
send mail from the host it is running on. For example,
|
|
if a <acronym>POP</acronym> server is available, users
|
|
will be able to check mail from remote locations but they
|
|
will not be able to send outgoing emails from outside
|
|
locations. Typically, a few moments after the attempt, an
|
|
email will be sent from <literal>MAILER-DAEMON</literal>
|
|
with a <errorname>5.7 Relaying Denied</errorname>.</para>
|
|
|
|
<para>The most straightforward solution is to add the ISP's
|
|
FQDN to <filename>/etc/mail/relay-domains</filename>, as
|
|
seen in this example:</para>
|
|
|
|
<screen>&prompt.root; <userinput>echo "your.isp.example.com" > /etc/mail/relay-domains</userinput></screen>
|
|
|
|
<para>After creating or editing this file, restart
|
|
<application>Sendmail</application>. This works great if
|
|
the server administrator does not wish to send mail
|
|
locally, would like to use a <acronym>MUA</acronym> on a
|
|
remote machine, or would like to use another
|
|
<acronym>ISP</acronym> for remote connections. It is also
|
|
useful when there is only one or two email accounts. If
|
|
there are a large number of addresses, add them one per
|
|
line:</para>
|
|
|
|
<programlisting>your.isp.example.com
|
|
other.isp.example.net
|
|
users-isp.example.org
|
|
www.example.org</programlisting>
|
|
|
|
<para>Now any mail sent through the system by any host in
|
|
this list, provided the user has an account on the system,
|
|
will succeed. This allows users to send mail from the
|
|
system remotely without opening the system up to relaying
|
|
SPAM from the Internet.</para>
|
|
|
|
</answer>
|
|
</qandaentry>
|
|
</qandaset>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-advanced">
|
|
<title>Advanced Topics</title>
|
|
|
|
<para>This section covers more involved topics such as mail
|
|
configuration and setting up mail for an entire domain.</para>
|
|
|
|
<sect2 id="mail-config">
|
|
<title>Basic Configuration</title>
|
|
|
|
<indexterm>
|
|
<primary>email</primary>
|
|
<secondary>configuration</secondary>
|
|
</indexterm>
|
|
|
|
<para>Out of the box, one can send email to external hosts as
|
|
long as <filename>/etc/resolv.conf</filename> is configured or
|
|
the network has access to a configured
|
|
<acronym>DNS</acronym> server. If order to have mail
|
|
delivered to the <acronym>MTA</acronym> on the &os; host,
|
|
do one of the following:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Run a <acronym>DNS</acronym> server for the
|
|
domain.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Get mail delivered directly to to the
|
|
<acronym>FQDN</acronym> for the machine.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<indexterm><primary>SMTP</primary></indexterm>
|
|
<para>In order to have mail delivered directly to a host, it
|
|
must have a permanent static IP address, not a dynamic IP
|
|
address. If the system is behind a firewall, it must be
|
|
configured to allow SMTP traffic. To receive mail directly at
|
|
a host, one of these two must be configured:</para>
|
|
|
|
<itemizedlist>
|
|
<indexterm><primary>MX record</primary></indexterm>
|
|
<listitem>
|
|
<para>Make sure that the lowest-numbered
|
|
<acronym>MX</acronym> record in
|
|
<acronym>DNS</acronym> points to the host's static IP
|
|
address.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Make sure there is no <acronym>MX</acronym> entry in
|
|
the <acronym>DNS</acronym> for the host.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Either of the above will allow mail to be received
|
|
directly at the host.</para>
|
|
|
|
<para>Try this:</para>
|
|
|
|
<screen>&prompt.root; <userinput>hostname</userinput>
|
|
example.FreeBSD.org
|
|
&prompt.root; <userinput>host example.FreeBSD.org</userinput>
|
|
example.FreeBSD.org has address 204.216.27.XX</screen>
|
|
|
|
<para>In this example, mail sent directly to <email
|
|
role="nolink">yourlogin@example.FreeBSD.org</email>
|
|
should work without problems, assuming
|
|
<application>Sendmail</application> is running correctly on
|
|
<hostid role="fqdn">example.FreeBSD.org</hostid>.</para>
|
|
|
|
<para>For this example:</para>
|
|
|
|
<screen>&prompt.root; <userinput>host example.FreeBSD.org</userinput>
|
|
example.FreeBSD.org has address 204.216.27.XX
|
|
example.FreeBSD.org mail is handled (pri=10) by hub.FreeBSD.org</screen>
|
|
|
|
<para>All mail sent to <hostid
|
|
role="fqdn">example.FreeBSD.org</hostid> will be
|
|
collected on <hostid>hub</hostid> under the same username
|
|
instead of being sent directly to your host.</para>
|
|
|
|
<para>The above information is handled by the
|
|
<acronym>DNS</acronym> server. The <acronym>DNS</acronym>
|
|
record that carries mail routing information is the
|
|
<acronym>MX</acronym> entry. If no <acronym>MX</acronym>
|
|
record exists, mail will be delivered directly to the host by
|
|
way of its IP address.</para>
|
|
|
|
<para>The <acronym>MX</acronym> entry for <hostid
|
|
role="fqdn">freefall.FreeBSD.org</hostid> at one time looked
|
|
like this:</para>
|
|
|
|
<programlisting>freefall MX 30 mail.crl.net
|
|
freefall MX 40 agora.rdrop.com
|
|
freefall MX 10 freefall.FreeBSD.org
|
|
freefall MX 20 who.cdrom.com</programlisting>
|
|
|
|
<para><hostid>freefall</hostid> had many <acronym>MX</acronym>
|
|
entries. The lowest <acronym>MX</acronym> number is the host
|
|
that receives mail directly, if available. If it is not
|
|
accessible for some reason, the next lower-numbered host will
|
|
accept messages temporarily, and pass it along when a
|
|
lower-numbered host becomes available.</para>
|
|
|
|
<para>Alternate <acronym>MX</acronym> sites should have separate
|
|
Internet connections in order to be most useful. Your
|
|
<acronym>ISP</acronym> can provide this service.</para>
|
|
</sect2>
|
|
|
|
<sect2 id="mail-domain">
|
|
<title>Mail for a Domain</title>
|
|
|
|
<para>When configuring a <acronym>MTA</acronym> for a network,
|
|
any mail sent to hosts in its domain should be diverted to the
|
|
<acronym>MTA</acronym> so that users can receive their mail on
|
|
the master mail server.</para>
|
|
|
|
<indexterm><primary>DNS</primary></indexterm>
|
|
<para>To make life easiest, a user account with the same
|
|
<emphasis>username</emphasis> should exist on both the
|
|
<acronym>MTA</acronym> and the system with the
|
|
<acronym>MUA</acronym>. Use &man.adduser.8; to create the
|
|
user accounts.</para>
|
|
|
|
<para>The <acronym>MTA</acronym> must be the designated mail
|
|
exchanger for each workstation on the network. This is done
|
|
in the<acronym>DNS</acronym> configuration with an
|
|
<acronym>MX</acronym> record:</para>
|
|
|
|
<programlisting>example.FreeBSD.org A 204.216.27.XX ; Workstation
|
|
MX 10 hub.FreeBSD.org ; Mailhost</programlisting>
|
|
|
|
<para>This will redirect mail for the workstation to the
|
|
<acronym>MTA</acronym> no matter where the A record points.
|
|
The mail is sent to the <acronym>MX</acronym> host.</para>
|
|
|
|
<para>This must be configured on a <acronym>DNS</acronym>
|
|
server. If the network does not run its own
|
|
<acronym>DNS</acronym> server, talk to the
|
|
<acronym>ISP</acronym> or <acronym>DNS</acronym>
|
|
provider.</para>
|
|
|
|
<para>The following is an example of virtual email hosting.
|
|
Consider a customer with the domain <hostid
|
|
role="domainname">customer1.org</hostid>, where all the mail
|
|
for <hostid role="domainname">customer1.org</hostid> should be
|
|
sent to <hostid role="fqdn">mail.myhost.com</hostid>. The
|
|
<acronym>DNS</acronym> entry should look like this:</para>
|
|
|
|
<programlisting>customer1.org MX 10 mail.myhost.com</programlisting>
|
|
|
|
<para>An <literal>A</literal>> record is
|
|
<emphasis>not</emphasis> needed for <hostid
|
|
role="domainname">customer1.org</hostid> in order to only
|
|
handle email for that domain. However, running
|
|
<command>ping</command> against <hostid
|
|
role="domainname">customer1.org</hostid> will not work
|
|
unless an <literal>A</literal> record exists for it.</para>
|
|
|
|
<para>Tell the <acronym>MTA</acronym> which domains and/or
|
|
hostnames it should accept mail for. Either of the following
|
|
will work for <application>Sendmail</application>:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Add the hosts to
|
|
<filename>/etc/mail/local-host-names</filename> when
|
|
using the <literal>FEATURE(use_cw_file)</literal>.
|
|
For versions of
|
|
<application>Sendmail</application> earlier than 8.10,
|
|
edit <filename>/etc/sendmail.cw</filename> instead.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Add a <literal>Cwyour.host.com</literal> line to
|
|
<filename>/etc/sendmail.cf</filename>. For
|
|
<application>Sendmail</application> 8.10 or higher, add
|
|
that line to
|
|
<filename>/etc/mail/sendmail.cf</filename>.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="outgoing-only">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Bill</firstname>
|
|
<surname>Moran</surname>
|
|
<contrib>Contributed by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
|
|
<title>Setting Up to Send Only</title>
|
|
|
|
<para>There are many instances where one may only want to send
|
|
mail through a relay. Some examples are:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The computer is a desktop machine that needs to use
|
|
programs such as &man.send-pr.1;, using the
|
|
<acronym>ISP</acronym>'s mail relay.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>The computer is a server that does not handle mail
|
|
locally, but needs to pass off all mail to a relay for
|
|
processing.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>While any <acronym>MTA</acronym> is capable of filling
|
|
this particular niche, it can be difficult to properly configure
|
|
a full-featured <acronym>MTA</acronym> just to handle offloading
|
|
mail. Programs such as <application>Sendmail</application> and
|
|
<application>Postfix</application> are overkill for this
|
|
use.</para>
|
|
|
|
<para>Additionally, a typical Internet access service agreement
|
|
may forbid one from running a <quote>mail server</quote>.</para>
|
|
|
|
<para>The easiest way to fulfill those needs is to install the
|
|
<filename role="package">mail/ssmtp</filename> port:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/ports/mail/ssmtp</userinput>
|
|
&prompt.root; <userinput>make install replace clean</userinput></screen>
|
|
|
|
<para>Once installed, <filename
|
|
role="package">mail/ssmtp</filename> can be configured with
|
|
<filename>/usr/local/etc/ssmtp/ssmtp.conf</filename>:</para>
|
|
|
|
<programlisting>root=yourrealemail@example.com
|
|
mailhub=mail.example.com
|
|
rewriteDomain=example.com
|
|
hostname=_HOSTNAME_</programlisting>
|
|
|
|
<para>Use the real email address for <username>root</username>.
|
|
Enter the <acronym>ISP</acronym>'s outgoing mail relay in place
|
|
of <hostid role="fqdn">mail.example.com</hostid>. Some
|
|
<acronym>ISP</acronym>s call this the <quote>outgoing mail
|
|
server</quote> or <quote>SMTP server</quote>).</para>
|
|
|
|
<para>Make sure to disable
|
|
<application>Sendmail</application>, including the outgoing mail
|
|
service. See <xref linkend="mail-disable-sendmail"/> for
|
|
details.</para>
|
|
|
|
<para><filename role="package">mail/ssmtp</filename> has some
|
|
other options available. Refer to the examples in
|
|
<filename>/usr/local/etc/ssmtp</filename> or the manual page
|
|
of <application>ssmtp</application> for more information.</para>
|
|
|
|
<para>Setting up <application>ssmtp</application> in this manner
|
|
allows any software on the computer that needs to send mail to
|
|
function properly, while not violating the
|
|
<acronym>ISP</acronym>'s usage policy or allowing the computer
|
|
to be hijacked for spamming.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="SMTP-dialup">
|
|
<title>Using Mail with a Dialup Connection</title>
|
|
|
|
<para>When using a static IP address, one should not need to
|
|
adjust the default configuration. Set the hostname to the
|
|
assigned Internet name and <application>Sendmail</application>
|
|
will do the rest.</para>
|
|
|
|
<para>When using a dynamically assigned IP address and a dialup
|
|
PPP connection to the Internet, one usually has a mailbox on the
|
|
<acronym>ISP</acronym>'s mail server. In this example, the
|
|
<acronym>ISP</acronym>'s domain is <hostid
|
|
role="domainname">example.net</hostid>, the user name is
|
|
<username>user</username>, the hostname is <hostid
|
|
role="fqdn">bsd.home</hostid>, and the <acronym>ISP</acronym>
|
|
has allowed <hostid
|
|
role="fqdn">relay.example.net</hostid> as a mail relay.</para>
|
|
|
|
<para>In order to retrieve mail from the <acronym>ISP</acronym>'s
|
|
mailbox, install a retrieval agent from the Ports Collection.
|
|
<filename role="package">mail/fetchmail</filename> is a good
|
|
choice as it supports many different protocols. Usually, the
|
|
<acronym>ISP</acronym> will provide <acronym>POP</acronym>.
|
|
When using user <acronym>PPP</acronym>, email can be
|
|
automatically fetched when an Internet connection is established
|
|
with the following entry in
|
|
<filename>/etc/ppp/ppp.linkup</filename>:</para>
|
|
|
|
<programlisting>MYADDR:
|
|
!bg su user -c fetchmail</programlisting>
|
|
|
|
<para>When using <application>Sendmail</application> to deliver
|
|
mail to non-local accounts, configure
|
|
<application>Sendmail</application> to process the mail queue as
|
|
soon as the Internet connection is established. To do this, add
|
|
this line after the above <command>fetchmail</command> entry in
|
|
<filename>/etc/ppp/ppp.linkup</filename>:</para>
|
|
|
|
<programlisting> !bg su user -c "sendmail -q"</programlisting>
|
|
|
|
<para>In this example, there is an account for
|
|
<username>user</username> on <hostid
|
|
role="fqdn">bsd.home</hostid>. In the home directory of
|
|
<username>user</username> on <hostid
|
|
role="fqdn">bsd.home</hostid>, create a
|
|
<filename>.fetchmailrc</filename> which contains this
|
|
line:</para>
|
|
|
|
<programlisting>poll example.net protocol pop3 fetchall pass MySecret</programlisting>
|
|
|
|
<para>This file should not be readable by anyone except
|
|
<username>user</username> as it contains the password
|
|
<literal>MySecret</literal>.</para>
|
|
|
|
<para>In order to send mail with the correct
|
|
<literal>from:</literal> header, configure
|
|
<application>Sendmail</application> to use
|
|
<email>user@example.net</email> rather than <email
|
|
role="nolink">user@bsd.home</email> and to send all mail
|
|
via <hostid role="fqdn">relay.example.net</hostid>, allowing
|
|
quicker mail transmission.</para>
|
|
|
|
<para>The following <filename>.mc</filename> file should
|
|
suffice:</para>
|
|
|
|
<programlisting>VERSIONID(`bsd.home.mc version 1.0')
|
|
OSTYPE(bsd4.4)dnl
|
|
FEATURE(nouucp)dnl
|
|
MAILER(local)dnl
|
|
MAILER(smtp)dnl
|
|
Cwlocalhost
|
|
Cwbsd.home
|
|
MASQUERADE_AS(`example.net')dnl
|
|
FEATURE(allmasquerade)dnl
|
|
FEATURE(masquerade_envelope)dnl
|
|
FEATURE(nocanonify)dnl
|
|
FEATURE(nodns)dnl
|
|
define(`SMART_HOST', `relay.example.net')
|
|
Dmbsd.home
|
|
define(`confDOMAIN_NAME',`bsd.home')dnl
|
|
define(`confDELIVERY_MODE',`deferred')dnl</programlisting>
|
|
|
|
<para>Refer to the previous section for details of how to convert
|
|
this file into the
|
|
<filename>sendmail.cf</filename> format. Do not forget to
|
|
restart <application>Sendmail</application> after updating
|
|
<filename>sendmail.cf</filename>.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="SMTP-Auth">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>James</firstname>
|
|
<surname>Gorham</surname>
|
|
<contrib>Written by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
|
|
<title>SMTP Authentication</title>
|
|
|
|
<para>Configuring <acronym>SMTP</acronym> authentication on the
|
|
<acronym>MTA</acronym> provides a number of benefits.
|
|
<acronym>SMTP</acronym> authentication adds a layer
|
|
of security to <application>Sendmail</application>, and provides
|
|
mobile users who switch hosts the ability to use the same
|
|
<acronym>MTA</acronym> without the need to reconfigure their
|
|
mail client's settings each time.</para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Install <filename
|
|
role="package">security/cyrus-sasl2</filename>
|
|
from the Ports Collection. This port supports a number of
|
|
compile-time options. For the SMTP authentication method
|
|
demonstrated in this example, make sure that
|
|
<option>LOGIN</option> is not disabled.</para>
|
|
</step>
|
|
|
|
|
|
<step>
|
|
<para>After installing <filename
|
|
role="package">security/cyrus-sasl2</filename>,
|
|
edit
|
|
<filename>/usr/local/lib/sasl2/Sendmail.conf</filename>,
|
|
or create it if it does not exist, and add the following
|
|
line:</para>
|
|
|
|
<programlisting>pwcheck_method: saslauthd</programlisting>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Next, install <filename
|
|
role="package">security/cyrus-sasl2-saslauthd</filename>
|
|
and add the following line to
|
|
<filename>/etc/rc.conf</filename>:</para>
|
|
|
|
<programlisting>saslauthd_enable="YES"</programlisting>
|
|
|
|
<para>Finally, start the saslauthd daemon:</para>
|
|
|
|
<screen>&prompt.root; <userinput>service saslauthd start</userinput></screen>
|
|
|
|
<para>This daemon serves as a broker for
|
|
<application>sendmail</application> to authenticate against
|
|
the &os; &man.passwd.5; database. This
|
|
saves the trouble of creating a new set of usernames and
|
|
passwords for each user that needs to use
|
|
<acronym>SMTP</acronym> authentication, and keeps the login
|
|
and mail password the same.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Next, edit <filename>/etc/make.conf</filename> and add
|
|
the following lines:</para>
|
|
|
|
<programlisting>SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
|
|
SENDMAIL_LDFLAGS=-L/usr/local/lib
|
|
SENDMAIL_LDADD=-lsasl2</programlisting>
|
|
|
|
<para>These lines provide
|
|
<application>Sendmail</application> the proper configuration
|
|
options for linking to <filename
|
|
role="package">cyrus-sasl2</filename> at compile time.
|
|
Make sure that <filename
|
|
role="package">cyrus-sasl2</filename> has been installed
|
|
before recompiling
|
|
<application>Sendmail</application>.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Recompile <application>Sendmail</application> by
|
|
executing the following commands:</para>
|
|
|
|
<screen>&prompt.root; <userinput>cd /usr/src/lib/libsmutil</userinput>
|
|
&prompt.root; <userinput>make cleandir && make obj && make</userinput>
|
|
&prompt.root; <userinput>cd /usr/src/lib/libsm</userinput>
|
|
&prompt.root; <userinput>make cleandir && make obj && make</userinput>
|
|
&prompt.root; <userinput>cd /usr/src/usr.sbin/sendmail</userinput>
|
|
&prompt.root; <userinput>make cleandir && make obj && make && make install</userinput></screen>
|
|
|
|
<para>This compile should not have any problems if
|
|
<filename class="directory">/usr/src</filename> has not
|
|
changed extensively and the shared libraries it needs are
|
|
available.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>After <application>Sendmail</application> has been
|
|
compiled and reinstalled, edit
|
|
<filename>/etc/mail/freebsd.mc</filename> or the local
|
|
<filename>.mc</filename> file. Many administrators choose
|
|
to use the output from &man.hostname.1; as the name of the
|
|
<filename>.mc</filename> file for uniqueness. Add these
|
|
lines:</para>
|
|
|
|
<programlisting>dnl set SASL options
|
|
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl
|
|
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')dnl</programlisting>
|
|
|
|
<para>These options configure the different methods available
|
|
to <application>Sendmail</application> for authenticating
|
|
users. To use a method other than
|
|
<application>pwcheck</application>, refer to the
|
|
<application>Sendmail</application> documentation.</para>
|
|
</step>
|
|
|
|
<step>
|
|
<para>Finally, run &man.make.1; while in <filename
|
|
class="directory">/etc/mail</filename>. That will run the
|
|
new <filename>.mc</filename> and create a
|
|
<filename>.cf</filename> named either
|
|
<filename>freebsd.cf</filename> or the name used for the
|
|
local <filename>.mc</filename>. Then, run <command>make
|
|
install restart</command>, which will copy the file to
|
|
<filename>sendmail.cf</filename>, and properly restart
|
|
<application>Sendmail</application>. For more information
|
|
about this process, refer to
|
|
<filename>/etc/mail/Makefile</filename>.</para>
|
|
</step>
|
|
</procedure>
|
|
|
|
<para>To test the configuration, use a <acronym>MUA</acronym> to
|
|
send a test message. For further investigation, set the
|
|
<option>LogLevel</option> of <application>Sendmail</application>
|
|
to <literal>13</literal> and watch
|
|
<filename>/var/log/maillog</filename> for any errors.</para>
|
|
|
|
<para>For more information, refer to <ulink
|
|
url="http://www.sendmail.org/~ca/email/auth.html">
|
|
<acronym>SMTP</acronym> authentication</ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-agents">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Marc</firstname>
|
|
<surname>Silver</surname>
|
|
<contrib>Contributed by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
<title>Mail User Agents</title>
|
|
|
|
<indexterm>
|
|
<primary>Mail User Agents</primary>
|
|
</indexterm>
|
|
|
|
<para>A <acronym>MUA</acronym> is an application that is used to
|
|
send and receive email. As email <quote>evolves</quote> and
|
|
becomes more complex, <acronym>MUA</acronym>s are becoming
|
|
increasingly powerful and provide users increased functionality
|
|
and flexibility. The <literal>mail</literal> category of the
|
|
&os; Ports Collection contains numerous <acronym>MUA</acronym>s.
|
|
These include graphical email clients such as
|
|
<application>Evolution</application> or
|
|
<application>Balsa</application> and console based clients such
|
|
as <application>mutt</application> or
|
|
<application>alpine</application>.</para>
|
|
|
|
<sect2 id="mail-command">
|
|
<title><command>mail</command></title>
|
|
|
|
<para>&man.mail.1; is the default
|
|
<acronym>MUA</acronym> installed with &os;. It is a console
|
|
based <acronym>MUA</acronym> that offers the basic
|
|
functionality required to send and receive text-based email.
|
|
It provides limited attachment support and can only access
|
|
local mailboxes.</para>
|
|
|
|
<para>Although <command>mail</command> does not natively support
|
|
interaction with <acronym>POP</acronym> or
|
|
<acronym>IMAP</acronym> servers, these mailboxes may be
|
|
downloaded to a local <filename>mbox</filename> using an
|
|
application such as
|
|
<application>fetchmail</application>.</para>
|
|
|
|
<para>In order to send and receive email, run
|
|
<command>mail</command>:</para>
|
|
|
|
<screen>&prompt.user; <userinput>mail</userinput></screen>
|
|
|
|
<para>The contents of the user's mailbox in <filename
|
|
class="directory">/var/mail</filename> are automatically
|
|
read by <command>mail</command>. Should the mailbox be empty,
|
|
the utility exits with a message indicating that no mail could
|
|
be found. If mail exists, the application interface starts,
|
|
and a list of messages will be displayed. Messages are
|
|
automatically numbered, as can be seen in the following
|
|
example:</para>
|
|
|
|
<screen>Mail version 8.1 6/6/93. Type ? for help.
|
|
"/var/mail/marcs": 3 messages 3 new
|
|
>N 1 root@localhost Mon Mar 8 14:05 14/510 "test"
|
|
N 2 root@localhost Mon Mar 8 14:05 14/509 "user account"
|
|
N 3 root@localhost Mon Mar 8 14:05 14/509 "sample"</screen>
|
|
|
|
<para>Messages can now be read by typing <keycap>t</keycap>
|
|
followed by the message number. This example reads the first
|
|
email:</para>
|
|
|
|
<screen>& <userinput>t 1</userinput>
|
|
Message 1:
|
|
From root@localhost Mon Mar 8 14:05:52 2004
|
|
X-Original-To: marcs@localhost
|
|
Delivered-To: marcs@localhost
|
|
To: marcs@localhost
|
|
Subject: test
|
|
Date: Mon, 8 Mar 2004 14:05:52 +0200 (SAST)
|
|
From: root@localhost (Charlie Root)
|
|
|
|
This is a test message, please reply if you receive it.</screen>
|
|
|
|
<para>As seen in this example, the message will be displayed
|
|
with full headers. To display the list of messages again,
|
|
press <keycap>h</keycap>.</para>
|
|
|
|
<para>If the email requires a reply, press either
|
|
<keycap>R</keycap> or <keycap>r</keycap>
|
|
<command>mail</command> keys. <keycap>R</keycap> instructs
|
|
<command>mail</command> to reply only to the sender of the
|
|
email, while <keycap>r</keycap> replies to all other
|
|
recipients of the message. These commands can be suffixed
|
|
with the mail number of the message to reply to. After typing
|
|
the response, the end of the message should be marked by a
|
|
single <keycap>.</keycap> on its own line. An example can be
|
|
seen below:</para>
|
|
|
|
<screen>& <userinput>R 1</userinput>
|
|
To: root@localhost
|
|
Subject: Re: test
|
|
|
|
<userinput>Thank you, I did get your email.
|
|
.</userinput>
|
|
EOT</screen>
|
|
|
|
<para>In order to send a new email, press <keycap>m</keycap>,
|
|
followed by the recipient email address. Multiple recipients
|
|
may be specified by separating each address with the
|
|
<keycap>,</keycap> delimiter. The subject of the message may
|
|
then be entered, followed by the message contents. The end of
|
|
the message should be specified by putting a single
|
|
<keycap>.</keycap> on its own line.</para>
|
|
|
|
<screen>& <userinput>mail root@localhost</userinput>
|
|
Subject: <userinput>I mastered mail
|
|
|
|
Now I can send and receive email using mail ... :)
|
|
.</userinput>
|
|
EOT</screen>
|
|
|
|
<para>While using <command>mail</command>, press
|
|
<keycap>?</keycap> to display help at any time. Refer to
|
|
&man.mail.1; for more help on how to use
|
|
<command>mail</command>.</para>
|
|
|
|
<note>
|
|
<para>&man.mail.1; was not designed to handle attachments and
|
|
thus deals with them poorly. Newer <acronym>MUA</acronym>s
|
|
handle attachments in a more intelligent way. Users who
|
|
prefer to use <command>mail</command> may find the <filename
|
|
role="package">converters/mpack</filename> port to be of
|
|
considerable use.</para>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2 id="mutt-command">
|
|
<title><application>mutt</application></title>
|
|
|
|
<para><application>mutt</application> is a powerful
|
|
<acronym>MUA</acronym>, with many features, including:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>The ability to thread messages.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>PGP support for digital signing and encryption of
|
|
email.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>MIME support.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Maildir support.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Highly customizable.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Refer to <ulink
|
|
url="http://www.mutt.org"></ulink> for more
|
|
information on <application>mutt</application>.</para>
|
|
|
|
<para><application>mutt</application>
|
|
may be installed using the <filename
|
|
role="package">mail/mutt</filename> port. After the
|
|
port has been installed, <application>mutt</application> can
|
|
be started by issuing the following command:</para>
|
|
|
|
<screen>&prompt.user; <userinput>mutt</userinput></screen>
|
|
|
|
<para><application>mutt</application> will automatically read
|
|
and display the contents of the user mailbox in <filename
|
|
class="directory">/var/mail</filename>. If no mails are
|
|
found, <application>mutt</application> will wait for commands
|
|
from the user. The example below shows
|
|
<application>mutt</application> displaying a list of
|
|
messages:</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/mutt1"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>To read an email, select it using the cursor keys and
|
|
press <keycap>Enter</keycap>. An example of
|
|
<application>mutt</application> displaying email can be seen
|
|
below:</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/mutt2"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>Similar to &man.mail.1;, <application>mutt</application>
|
|
can be used to reply only to the sender of the message as well
|
|
as to all recipients. To reply only to the sender of the
|
|
email, press <keycap>r</keycap>. To send a group reply
|
|
to the original sender as well as all the message recipients,
|
|
press <keycap>g</keycap>.</para>
|
|
|
|
<note>
|
|
<para>By default, <application>mutt</application> uses the
|
|
&man.vi.1; editor for creating and replying to emails. Each
|
|
user can customize this by creating or editing the
|
|
<filename>.muttrc</filename> in their home directory and
|
|
setting the <literal>editor</literal> variable or by setting
|
|
the <envar>EDITOR</envar> environment variable. Refer to
|
|
<ulink url="http://www.mutt.org/"></ulink> for more
|
|
information about configuring
|
|
<application>mutt</application>.</para>
|
|
</note>
|
|
|
|
<para>To compose a new mail message, press
|
|
<keycap>m</keycap>. After a valid subject has been given,
|
|
<application>mutt</application> will start &man.vi.1; so the
|
|
email can be written. Once the contents of the email are
|
|
complete, save and quit from <command>vi</command>.
|
|
<application>mutt</application> will resume, displaying a
|
|
summary screen of the mail that is to be delivered. In
|
|
order to send the mail, press <keycap>y</keycap>. An example
|
|
of the summary screen can be seen below:</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/mutt3"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para><application>mutt</application> contains extensive help
|
|
which can be accessed from most of the menus by pressing
|
|
<keycap>?</keycap>. The top line also displays the keyboard
|
|
shortcuts where appropriate.</para>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="alpine-command">
|
|
<title><application>alpine</application></title>
|
|
|
|
<para><application>alpine</application> is aimed at a beginner
|
|
user, but also includes some advanced features.</para>
|
|
|
|
<warning>
|
|
<para><application>alpine</application> has had several remote
|
|
vulnerabilities discovered in the past, which allowed remote
|
|
attackers to execute arbitrary code as users on the local
|
|
system, by the action of sending a specially-prepared email.
|
|
While <emphasis>known</emphasis> problems have been fixed,
|
|
<application>alpine</application> code is written in an
|
|
insecure style and the &os; Security Officer believes there
|
|
are likely to be other undiscovered vulnerabilities. Users
|
|
install <application>alpine</application> at their own
|
|
risk.</para>
|
|
</warning>
|
|
|
|
<para>The current version of <application>alpine</application>
|
|
may be installed using the <filename
|
|
role="package">mail/alpine</filename> port. Once the port
|
|
has installed, <application>alpine</application> can be
|
|
started by issuing the following command:</para>
|
|
|
|
<screen>&prompt.user; <userinput>alpine</userinput></screen>
|
|
|
|
<para>The first time <application>alpine</application>
|
|
runs, it displays a greeting page with a brief introduction,
|
|
as well as a request from the
|
|
<application>alpine</application> development team to send
|
|
an anonymous email message allowing them to judge how many
|
|
users are using their client. To send this anonymous message,
|
|
press <keycap>Enter</keycap>. Alternatively, press
|
|
<keycap>E</keycap> to exit the greeting without sending an
|
|
anonymous message. An example of the greeting page is
|
|
shown below:</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/pine1"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>The main menu is then presented, which can be navigated
|
|
using the cursor keys. This main menu provides shortcuts for
|
|
the composing new mails, browsing mail directories, and
|
|
administering address book entries. Below the main menu,
|
|
relevant keyboard shortcuts to perform functions specific to
|
|
the task at hand are shown.</para>
|
|
|
|
<para>The default directory opened by
|
|
<application>alpine</application> is <filename
|
|
class="directory">inbox</filename>. To view the message
|
|
index, press <keycap>I</keycap>, or select the
|
|
<guimenuitem>MESSAGE INDEX</guimenuitem> option shown
|
|
below:</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/pine2"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>The message index shows messages in the current directory
|
|
and can be navigated by using the cursor keys. Highlighted
|
|
messages can be read by pressing
|
|
<keycap>Enter</keycap>.</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/pine3"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>In the screenshot below, a sample message is displayed by
|
|
<application>alpine</application>. Contextual keyboard
|
|
shortcuts are displayed at the bottom of the screen. An
|
|
example of one of a shortcut is <keycap>r</keycap>, which
|
|
tells the <acronym>MUA</acronym> to reply to the current
|
|
message being displayed.</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/pine4"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para>Replying to an email in <application>alpine</application>
|
|
is done using the <application>pico</application> editor,
|
|
which is installed by default with
|
|
<application>alpine</application>.
|
|
<application>pico</application> makes it easy to navigate the
|
|
message and is easier for novice users to use than &man.vi.1;
|
|
or &man.mail.1;. Once the reply is complete, the message can
|
|
be sent by pressing <keycombo
|
|
action="simul"><keycap>Ctrl</keycap><keycap>X</keycap>
|
|
</keycombo>. <application>alpine</application>
|
|
will ask for confirmation before sending the message.</para>
|
|
|
|
<mediaobject>
|
|
<imageobject>
|
|
<imagedata fileref="mail/pine5"/>
|
|
</imageobject>
|
|
</mediaobject>
|
|
|
|
<para><application>alpine</application> can be customized using
|
|
the <guimenuitem>SETUP</guimenuitem> option from the main
|
|
menu. Consult <ulink
|
|
url="http://www.washington.edu/alpine/"></ulink>
|
|
for more information.</para>
|
|
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-fetchmail">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Marc</firstname>
|
|
<surname>Silver</surname>
|
|
<contrib>Contributed by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
<title>Using <application>fetchmail</application></title>
|
|
|
|
<indexterm>
|
|
<primary>fetchmail</primary>
|
|
</indexterm>
|
|
|
|
<para><application>fetchmail</application> is a full-featured
|
|
<acronym>IMAP</acronym> and <acronym>POP</acronym> client. It
|
|
allows users to automatically download mail from remote
|
|
<acronym>IMAP</acronym> and <acronym>POP</acronym> servers and
|
|
save it into local mailboxes where it can be accessed more
|
|
easily. <application>fetchmail</application> can be installed
|
|
using the <filename role="package">mail/fetchmail</filename>
|
|
port, and offers various features, including:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Support for the <acronym>POP3</acronym>,
|
|
<acronym>APOP</acronym>, <acronym>KPOP</acronym>,
|
|
<acronym>IMAP</acronym>, <acronym>ETRN</acronym> and
|
|
<acronym>ODMR</acronym> protocols.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Ability to forward mail using <acronym>SMTP</acronym>,
|
|
which allows filtering, forwarding, and aliasing to function
|
|
normally.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>May be run in daemon mode to check periodically for new
|
|
messages.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Can retrieve multiple mailboxes and forward them, based
|
|
on configuration, to different local users.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>This section explains some of the basic features of
|
|
<application>fetchmail</application>. This utility requires a
|
|
<filename>.fetchmailrc</filename> configuration in the user's
|
|
home directory in order to run correctly. This file includes
|
|
server information as well as login credentials. Due to the
|
|
sensitive nature of the contents of this file, it is advisable
|
|
to make it readable only by the user, with the following
|
|
command:</para>
|
|
|
|
<screen>&prompt.user; <userinput>chmod 600 .fetchmailrc</userinput></screen>
|
|
|
|
<para>The following <filename>.fetchmailrc</filename> serves as an
|
|
example for downloading a single user mailbox using
|
|
<acronym>POP</acronym>. It tells
|
|
<application>fetchmail</application> to connect to <hostid
|
|
role="fqdn">example.com</hostid> using a username of
|
|
<username>joesoap</username> and a password of
|
|
<literal>XXX</literal>. This example assumes that the user
|
|
<username>joesoap</username> exists on the local system.</para>
|
|
|
|
<programlisting>poll example.com protocol pop3 username "joesoap" password "XXX"</programlisting>
|
|
|
|
<para>The next example connects to multiple <acronym>POP</acronym>
|
|
and <acronym>IMAP</acronym> servers and redirects to different
|
|
local usernames where applicable:</para>
|
|
|
|
<programlisting>poll example.com proto pop3:
|
|
user "joesoap", with password "XXX", is "jsoap" here;
|
|
user "andrea", with password "XXXX";
|
|
poll example2.net proto imap:
|
|
user "john", with password "XXXXX", is "myth" here;</programlisting>
|
|
|
|
<para><application>fetchmail</application> can be run in daemon
|
|
mode by running it with <option>-d</option>, followed by the
|
|
interval (in seconds) that <application>fetchmail</application>
|
|
should poll servers listed in <filename>.fetchmailrc</filename>.
|
|
The following example configures
|
|
<application>fetchmail</application> to poll every 600
|
|
seconds:</para>
|
|
|
|
<screen>&prompt.user; <userinput>fetchmail -d 600</userinput></screen>
|
|
|
|
<para>More information on <application>fetchmail</application> can
|
|
be found at <ulink
|
|
url="http://fetchmail.berlios.de/"></ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="mail-procmail">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Marc</firstname>
|
|
<surname>Silver</surname>
|
|
<contrib>Contributed by </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
<title>Using <application>procmail</application></title>
|
|
|
|
<indexterm>
|
|
<primary>procmail</primary>
|
|
</indexterm>
|
|
|
|
<para><application>procmail</application> is a powerful
|
|
application used to filter incoming mail. It allows users to
|
|
define <quote>rules</quote> which can be matched to incoming
|
|
mails to perform specific functions or to reroute mail to
|
|
alternative mailboxes or email addresses.
|
|
<application>procmail</application> can be installed using the
|
|
<filename role="package">mail/procmail</filename> port. Once
|
|
installed, it can be directly integrated into most
|
|
<acronym>MTA</acronym>s. Consult the <acronym>MTA</acronym>
|
|
documentation for more information. Alternatively,
|
|
<application>procmail</application> can be integrated by adding
|
|
the following line to a <filename>.forward</filename> in the
|
|
home directory of the user:</para>
|
|
|
|
<programlisting>"|exec /usr/local/bin/procmail || exit 75"</programlisting>
|
|
|
|
<para>The following section displays some basic
|
|
<application>procmail</application> rules, as well as brief
|
|
descriptions of what they do. Rules must be inserted into a
|
|
<filename>.procmailrc</filename>, which must reside in the
|
|
user's home directory.</para>
|
|
|
|
<para>The majority of these rules can be found in
|
|
&man.procmailex.5;.</para>
|
|
|
|
<para>To forward all mail from <email>user@example.com</email> to
|
|
an external address of <email
|
|
role="nolink">goodmail@example2.com</email>:</para>
|
|
|
|
<programlisting>:0
|
|
* ^From.*user@example.com
|
|
! goodmail@example2.com</programlisting>
|
|
|
|
<para>To forward all mails shorter than 1000 bytes to an external
|
|
address of <email
|
|
role="nolink">goodmail@example2.com</email>:</para>
|
|
|
|
<programlisting>:0
|
|
* < 1000
|
|
! goodmail@example2.com</programlisting>
|
|
|
|
<para>To send all mail sent to
|
|
<email>alternate@example.com</email> to a mailbox called
|
|
<filename>alternate</filename>:</para>
|
|
|
|
<programlisting>:0
|
|
* ^TOalternate@example.com
|
|
alternate</programlisting>
|
|
|
|
<para>To send all mail with a subject of <quote>Spam</quote> to
|
|
<devicename>/dev/null</devicename>:</para>
|
|
|
|
<programlisting>:0
|
|
^Subject:.*Spam
|
|
/dev/null</programlisting>
|
|
|
|
<para>A useful recipe that parses incoming <hostid
|
|
role="domainname">&os;.org</hostid> mailing lists and places
|
|
each list in its own mailbox:</para>
|
|
|
|
<programlisting>:0
|
|
* ^Sender:.owner-freebsd-\/[^@]+@FreeBSD.ORG
|
|
{
|
|
LISTNAME=${MATCH}
|
|
:0
|
|
* LISTNAME??^\/[^@]+
|
|
FreeBSD-${MATCH}
|
|
}</programlisting>
|
|
</sect1>
|
|
</chapter>
|