<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
   "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../../general.ent">
  %general-entities;

  <!-- Downloads a web page
  <!ENTITY sendmail-download-http "http://www.sendmail.org/ftp/sendmail.&sendmail-version;.tar.gz"> -->
  <!ENTITY sendmail-download-http " ">
  <!ENTITY sendmail-download-ftp  "ftp://ftp.sendmail.org/pub/sendmail/sendmail.&sendmail-version;.tar.gz">
  <!ENTITY sendmail-md5sum        "a45308a08d8ce64be91b7d86a7523e4f">
  <!ENTITY sendmail-size          "2.1 MB">
  <!ENTITY sendmail-buildsize     "16 MB">
  <!ENTITY sendmail-time          "0.3 SBU">
]>

<sect1 id="sendmail" xreflabel="sendmail-&sendmail-version;">
  <?dbhtml filename="sendmail.html"?>

  <sect1info>
    <othername>$LastChangedBy: bdubbs $</othername>
    <date>$Date: 2015-02-25 17:44:17 -0500 (Wed, 25 Feb 2015) $</date>
  </sect1info>

  <title>sendmail-&sendmail-version;</title>

  <indexterm zone="sendmail">
    <primary sortas="a-sendmail">sendmail</primary>
  </indexterm>

  <sect2 role="package">
    <title>Introduction to sendmail</title>

    <para>The <application>sendmail</application> package contains a Mail
    Transport Agent (MTA).</para>

    &lfs77_checked;

    <bridgehead renderas="sect3">Package Information</bridgehead>
    <itemizedlist spacing="compact">
      <listitem>
        <para>Download (HTTP): <ulink url="&sendmail-download-http;"/></para>
      </listitem>
      <listitem>
        <para>Download (FTP): <ulink url="&sendmail-download-ftp;"/></para>
      </listitem>
      <listitem>
        <para>Download MD5 sum: &sendmail-md5sum;</para>
      </listitem>
      <listitem>
        <para>Download size: &sendmail-size;</para>
      </listitem>
      <listitem>
        <para>Estimated disk space required: &sendmail-buildsize;</para>
      </listitem>
      <listitem>
        <para>Estimated build time: &sendmail-time;</para>
      </listitem>
    </itemizedlist>

    <bridgehead renderas="sect3">sendmail Dependencies</bridgehead>

    <bridgehead renderas="sect4">Required</bridgehead>
    <para role="required">
      <xref linkend="openldap"/> (client)
    </para>

    <bridgehead renderas="sect4">Recommanded</bridgehead>
    <para role="recommanded">
      <xref linkend="openssl"/> and
      <xref linkend="cyrus-sasl"/>
    </para>

    <bridgehead renderas="sect4">Optional</bridgehead>
    <para role="optional">
      <xref linkend="procmail"/>,
      <ulink url="http://www.feep.net/nph/">nph</ulink>, and
      <xref linkend="gs"/> (for creating PDF documentation)
    </para>

    <para condition="html" role="usernotes">User Notes:
    <ulink url="&blfs-wiki;/sendmail"/></para>

  </sect2>

  <sect2 role="installation">
    <title>Installation of sendmail</title>

    <para>Before building <application>sendmail</application>, create the
    required user, group and directory with the following commands issued as
    the <systemitem class="username">root</systemitem> user:</para>

<screen role="root"><userinput>groupadd -g 26 smmsp                               &amp;&amp;
useradd -c "Sendmail Daemon" -g smmsp -d /dev/null \
        -s /bin/false -u 26 smmsp                  &amp;&amp;
chmod -v 1777 /var/mail                            &amp;&amp;
install -v -m700 -d /var/spool/mqueue</userinput></screen>

    <note><para>See the source tree <filename>sendmail/README</filename> file
    for information on linking optional packages into the build. Use the
    example below, which adds support for SASL, StartTLS
    (<application>OpenSSL</application>) and
    <application>OpenLDAP</application>, as a starting point.  Of course,
    modify it to suit your particular needs.</para></note>

<screen><userinput>cat &gt;&gt; devtools/Site/site.config.m4 &lt;&lt; "EOF"
<literal>APPENDDEF(`confENVDEF',`-DSTARTTLS -DSASL -DLDAPMAP')
APPENDDEF(`confLIBS', `-lssl -lcrypto -lsasl2 -lldap -llber -ldb')
APPENDDEF(`confINCDIRS', `-I/usr/include/sasl')</literal>
EOF</userinput></screen>

    <para>Install <application>sendmail</application> with the following
    commands:</para>

<screen><userinput>cat &gt;&gt; devtools/Site/site.config.m4 &lt;&lt; "EOF"
<literal>define(`confMANGRP',`root')
define(`confMANOWN',`root')
define(`confSBINGRP',`root')
define(`confUBINGRP',`root')
define(`confUBINOWN',`root')</literal>
EOF

sed -i 's|/usr/man/man|/usr/share/man/man|' \
    devtools/OS/Linux           &amp;&amp;

cd sendmail                     &amp;&amp;
sh Build                        &amp;&amp;
cd ../cf/cf                     &amp;&amp;
cp generic-linux.mc sendmail.mc &amp;&amp;
sh Build sendmail.cf</userinput></screen>

    <para>This package does not come with a test suite.</para>

    <para>Now, as the <systemitem class="username">root</systemitem> user:</para>

<screen role="root"><userinput>install -v -d -m755 /etc/mail &amp;&amp;
sh Build install-cf &amp;&amp;

cd ../..            &amp;&amp;
sh Build install    &amp;&amp;

install -v -m644 cf/cf/{submit,sendmail}.mc /etc/mail &amp;&amp;
cp -v -R cf/* /etc/mail                               &amp;&amp;

install -v -m755 -d /usr/share/doc/sendmail-&sendmail-version;/{cf,sendmail} &amp;&amp;

install -v -m644 CACerts FAQ KNOWNBUGS LICENSE PGPKEYS README RELEASE_NOTES \
        /usr/share/doc/sendmail-&sendmail-version; &amp;&amp;

install -v -m644 sendmail/{README,SECURITY,TRACEFLAGS,TUNING} \
        /usr/share/doc/sendmail-&sendmail-version;/sendmail &amp;&amp;

install -v -m644 cf/README /usr/share/doc/sendmail-&sendmail-version;/cf &amp;&amp;

for manpage in sendmail editmap mailstats makemap praliases smrsh
do
    install -v -m644 $manpage/$manpage.8 /usr/share/man/man8
done &amp;&amp;

install -v -m644 sendmail/aliases.5    /usr/share/man/man5 &amp;&amp;
install -v -m644 sendmail/mailq.1      /usr/share/man/man1 &amp;&amp;
install -v -m644 sendmail/newaliases.1 /usr/share/man/man1 &amp;&amp;
install -v -m644 vacation/vacation.1   /usr/share/man/man1</userinput></screen>

    <para>Install the <application>sendmail</application> Installation and
    Operations Guide with the following commands:</para>

    <note><para>Remove <filename>op.pdf</filename> from the
    <command>make</command> and <command>install</command> commands below if
    you don't have <application>Ghostscript</application>
    installed.</para></note>

<screen><userinput>cd doc/op                                       &amp;&amp;
sed -i 's/groff/GROFF_NO_SGR=1 groff/' Makefile &amp;&amp;
make op.txt op.pdf</userinput></screen>

    <para>Now, as the <systemitem class="username">root</systemitem> user:</para>

<screen role="root"><userinput>install -v -d -m755 /usr/share/doc/sendmail-&sendmail-version; &amp;&amp;
install -v -m644 op.ps op.txt op.pdf /usr/share/doc/sendmail-&sendmail-version; &amp;&amp;
cd ../..</userinput></screen>

  </sect2>

  <sect2 role="commands">
    <title>Command Explanations</title>

    <para><command>cat &gt; devtools/Site/site.config.m4 &lt;&lt; "EOF"</command>:
    This creates a configuration file changing some of the default settings.</para>

    <para><command>sed ... devtools/OS/Linux</command>: The site.config.m4
    does not honor a change to the man directory, so fix it in the OS 
    definitions.</para>

    <para><command>sed ... include/sm/bdb.h</command>: This allows sendmail to
    build properly with <xref linkend='db'/> versions 5 and above.</para>

    <para><command>sh Build; sh Build sendmail.cf; sh Build install-cf;
    sh Build install</command>: <application>sendmail</application> uses an
    <application>m4</application> based build script to create the various
    <filename>Makefile</filename>s. These commands build and install the
    package.</para>

    <para><command>for manpage in...;do...;done; install ...</command>: The man
    pages are installed already formatted and <command>man</command> displays
    them somewhat garbled. These commands replace the formatted pages with
    pages <command>man</command> can display properly.</para>

  </sect2>

  <sect2 role="configuration">
    <title>Configuring sendmail</title>

    <sect3 id="sendmail-config">
      <title>Config Files</title>

      <para><filename>/etc/mail/*</filename></para>

      <indexterm zone="sendmail sendmail-config">
        <primary sortas="e-etc-mail">/etc/mail/*</primary>
      </indexterm>

    </sect3>

    <sect3>
      <title>Configuration Information</title>

      <note><para>Ensure you have a fully qualified domain name defined
      in <filename>/etc/hosts</filename> for your system before proceeding.
      </para></note>

      <para>Create the <filename>/etc/mail/local-host-names</filename> and
      <filename>/etc/mail/aliases</filename> files using the following
      commands as the <systemitem class="username">root</systemitem>
      user:</para>

<screen role="root"><userinput>echo $(hostname) > /etc/mail/local-host-names
cat &gt; /etc/mail/aliases &lt;&lt; "EOF"
<literal>postmaster: root
MAILER-DAEMON: root</literal>

EOF
newaliases</userinput></screen>

      <para><application>sendmail</application>'s primary configuration file,
      <filename>/etc/mail/sendmail.cf</filename>, is complex and not meant to be
      directly edited. The recommended method for changing it is to modify
      <filename>/etc/mail/sendmail.mc</filename> and various
      <application>m4</application> files, then run the <command>m4</command>
      macro processor from within
      <filename class='directory'>/etc/mail</filename> as follows:</para>

<screen role="root"><userinput>cd /etc/mail &amp;&amp;
m4 m4/cf.m4 sendmail.mc > sendmail.cf</userinput></screen>

      <para>A full explanation of the files to modify, and the available
      parameters can be found in <filename>/etc/mail/README</filename>.</para>

    </sect3>

    <sect3  id="sendmail-init">
      <title>Boot Script</title>

      <para>To automate the running of <application>sendmail</application>
      at startup, install the <filename>/etc/rc.d/init.d/sendmail</filename>
      init script included in the
      <xref linkend="bootscripts"/> package.</para>

      <indexterm zone="sendmail sendmail-init">
        <primary sortas="f-sendmail-init">sendmail</primary>
      </indexterm>

<screen role="root"><userinput>make install-sendmail</userinput></screen>

      <note>
        <para>The -qNm option to <command>sendmail</command>, where N is number
        of minutes, controls how often <application>sendmail</application> will
        process the mail queue. A default of 5 minutes is used in the init
        script. Individual workstation users may want to set this as low as 1
        minute, large installations handling more mail may want to set it
        higher.</para>
      </note>

    </sect3>

  </sect2>

  <sect2 role="content">
    <title>Contents</title>

    <segmentedlist>
      <segtitle>Installed Programs</segtitle>
      <segtitle>Installed Libraries</segtitle>
      <segtitle>Installed Directories</segtitle>

      <seglistitem>
        <seg>editmap, mailstats, makemap, praliases, sendmail, smrsh,
        and vacation; symlinks to /usr/sbin/sendmail: hoststat, mailq,
        newaliases, and purgestat</seg>
        <seg>None</seg>
        <seg>/etc/mail, /usr/share/doc/sendmail-&sendmail-version;,
        /var/spool/mqueue, and /var/spool/clientmqueue</seg>
      </seglistitem>
    </segmentedlist>

    <variablelist>
      <bridgehead renderas="sect3">Short Descriptions</bridgehead>
      <?dbfo list-presentation="list"?>
      <?dbhtml list-presentation="table"?>

      <varlistentry id="editmap">
        <term><command>editmap</command></term>
        <listitem>
          <para>queries and edits <application>sendmail</application> map
          files.</para>
          <indexterm zone="sendmail editmap">
            <primary sortas="b-editmap">editmap</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="hoststat">
        <term><command>hoststat</command></term>
        <listitem>
          <para>prints <application>sendmail</application>'s persistent host
          status.</para>
          <indexterm zone="sendmail hoststat">
            <primary sortas="b-hoststat">hoststat</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="mailstats">
        <term><command>mailstats</command></term>
        <listitem>
          <para>displays <application>sendmail</application> statistics.</para>
          <indexterm zone="sendmail mailstats">
            <primary sortas="b-mailstats">mailstats</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="mailq-sendmail">
        <term><command>mailq</command></term>
        <listitem>
          <para>prints a summary of outbound mail messages waiting for
          delivery.</para>
          <indexterm zone="sendmail mailq-sendmail">
            <primary sortas="b-mailq">mailq</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="makemap">
        <term><command>makemap</command></term>
        <listitem>
          <para>creates <application>sendmail</application> map files.</para>
          <indexterm zone="sendmail makemap">
            <primary sortas="b-makemap">makemap</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="newaliases-sendmail">
        <term><command>newaliases</command></term>
        <listitem>
          <para>rebuilds <filename>/etc/mail/aliases.db</filename> from the
          contents of <filename>/etc/mail/aliases</filename>.</para>
          <indexterm zone="sendmail newaliases-sendmail">
            <primary sortas="b-newaliases">newaliases</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="praliases">
        <term><command>praliases</command></term>
        <listitem>
          <para>displays current <application>sendmail</application>
          aliases.</para>
          <indexterm zone="sendmail praliases">
            <primary sortas="b-praliases">praliases</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="purgestat">
        <term><command>purgestat</command></term>
        <listitem>
          <para> causes <application>sendmail</application> to clear (purge)
          all its host-status information.</para>
          <indexterm zone="sendmail purgestat">
            <primary sortas="b-purgestat">purgestat</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="sendmail-prog-sendmail">
        <term><command>sendmail</command></term>
        <listitem>
          <para>is the <application>sendmail</application> mail transport
          agent.</para>
          <indexterm zone="sendmail sendmail-prog-sendmail">
            <primary sortas="b-sendmail">sendmail</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="smrsh">
        <term><command>smrsh</command></term>
        <listitem>
          <para>is a restricted shell for
          <application>sendmail</application>.</para>
          <indexterm zone="sendmail smrsh">
            <primary sortas="b-smrsh">smrsh</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="vacation-sendmail">
        <term><command>vacation</command></term>
        <listitem>
          <para>is an email auto responder.</para>
          <indexterm zone="sendmail vacation-sendmail">
            <primary sortas="b-vacation">vacation</primary>
          </indexterm>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

</sect1>
