All Articles

Install sendmail client in docker environment


I want to install sendmail and configure it’s smart host within CoreOS.


Add Dockerfile with content.

FROM ubuntu

# Install sendmail
RUN apt-get update
RUN apt-get install sendmail sendmail-cf m4 --assume-yes
RUN cat mail_setting.txt > /etc/mail/
RUN apt-get install bsd-mailx --assume-yes

# Other installation

# Run command
CMD ["/bin/sh", "-c", "cp /etc/hosts && sed -i -e "s/localhost$/localhost localhost.localdomain $(hostname)/g" && cp /etc/hosts && yes "y" | sendmailconfig"]

The above Dockerfile executes as following:

  • Get a base image from ubuntu.

  • Run update to make sure software up to date.

  • Install sendmail software.

  • Copy configuration content to

  • Update /etc/hosts to include localhost.localdomain and value of hostname.

  • Install mailx for better sending mail command

  • Run configuration sendmail client. Automatically answer Yes to the questions of command sendmailconfig. This step is important to make sure everything will work.

Content of mail_setting.txt. Please replace your-smart-host and your-masquerade-domain with your actual hostname.

# $Sendmail:,v 8.15.2 2016-12-08 18:43:49 cowboy Exp $
# Copyright (c) 1998-2010 Richard Nelson.  All Rights Reserved.
# cf/debian/  Generated from by configure.
# prototype config file for building Sendmail 8.15.2
# Note: the .in file supports 8.7.6 - 9.0.0, but the generated
# file is customized to the version noted above.
# This file is used to configure Sendmail for use with Debian systems.
# If you modify this file, you will have to regenerate /etc/mail/
# by running this file through the m4 preprocessor via one of the following:
# * make   (or make -C /etc/mail)
# * sendmailconfig
# * m4 /etc/mail/ > /etc/mail/
# The first two options are preferred as they will also update other files
# that depend upon the contents of this file.
# The best documentation for this .mc file is:
# /usr/share/doc/sendmail-doc/cf.README.gz
#   Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.
#  This file is used to configure Sendmail for use with Debian systems.
VERSIONID(`$Id:, v 8.15.2-8 2016-12-08 18:43:49 cowboy Exp $')
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
dnl #
dnl # General defines
dnl #
dnl # SAFE_FILE_ENV: [undefined] If set, sendmail will do a chroot()
dnl # into this directory before writing files.
dnl # If *all* your user accounts are under /home then use that
dnl # instead - it will prevent any writes outside of /home !
dnl #   define(`confSAFE_FILE_ENV',             `')dnl
dnl #
dnl # Daemon options - restrict to servicing LOCALHOST ONLY !!!
dnl # Remove `, Addr=' clauses to receive from any interface
dnl # If you want to support IPv6, switch the commented/uncommentd lines
dnl #
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=')dnl
dnl #
dnl # Be somewhat anal in what we allow
dnl #
dnl # Define connection throttling and window length
define(`confCONNECTION_RATE_THROTTLE', `15')dnl
dnl #
dnl # Features
dnl #
dnl # use /etc/mail/local-host-names
dnl #
dnl # The access db is the basis for most of sendmail's checking
FEATURE(`access_db', , `skip')dnl
dnl #
dnl # The greet_pause feature stops some automail bots - but check the
dnl # provided access db for details on excluding localhosts...
FEATURE(`greet_pause', `1000')dnl 1 seconds
dnl #
dnl # Delay_checks allows sender<->recipient checking
FEATURE(`delay_checks', `friend', `n')dnl
dnl #
dnl # If we get too many bad recipients, slow things down...
dnl #
dnl # Stop connections that overflow our concurrent and time connection rates
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`ratecontrol', `nodelay', `terminate')dnl
dnl #
dnl # If you're on a dialup link, you should enable this - so sendmail
dnl # will not bring up the link (it will queue mail for later)
dnl define(`confCON_EXPENSIVE',`True')dnl
dnl #
dnl # Dialup/LAN connection overrides
dnl #
dnl #
dnl # Default Mailer setup


dnl MAILER(cyrusv2)dnl

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
define(`SMART_HOST', `your-smart-host')
dnl MAILER(cyrusv2)dnl

Other thing left is just build docker image and run.

Sendmail could be tested with:

Login to container:

docker -it exec <container_name> -- /bin/bash

Run test mail:

echo "a content" | mail -r "" -s "a subject" -- ""


We had to update /etc/hosts because it was slow sending mail. Without this setting, it may take 60 seconds to send an email!

The setting should be similar to following line:

(And notice that it should be in same line for all localhost, localhost.localdomain and yourhostname.) localhost.localdomain localhost yourhostname

yourhostname is the result of executing hostname command.