Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Suppose i send a mail using the following the following command:


then does mailx first try to find out the SMTP server of my ISP for relaying the mail or does it connect directly. Does it depend on whether my PC has a public IP address or it is behind a NAT. How do I check the settings of mailx on my PC? How can I verify this using tcpdump?

share|improve this question
up vote 14 down vote accepted

Normally, mail and derivatives (and almost any other Unix MUA) use the traditional sendmail interface - /usr/bin/sendmail, provided by almost all MTAs (postfix, exim, sendmail, courier). This is the traditional Unix way.

Once a message is submitted through sendmail, your MTA handles message transmission. Depending on configuration, it may either connect directly to the destination MTA (if on a server), or relay mail through another host (also called a smarthost) - the latter is more common on personal computers, where relaying through your Gmail or ISP/work email account is essential.

(Some MTAs such as esmtp or nullmailer are built specifically for home users and always use a relayhost. These don't support receiving mail and are a lot lighter on resources.)

mailx → /usr/bin/sendmail → local MTA → recipient MTA → recipient inbox
mailx → /usr/bin/sendmail → local MTA → Gmail or ISP/work servers → recipient MTA → recipient inbox

Other programs (mostly the user-friendly graphical clients such as Thunderbird or Outlook) connect directly to a relay SMTP server (again, usually Gmail or ISP/work SMTP server), which transmits the message further.

SMTP support is present in heirloom-mailx, but not in the traditional bsd-mailx.

app → Gmail or ISP/work servers → recipient MTA → recipient inbox

The third method - directly to recipient's server - is almost never used, and no MUA supports it. On personal computers, using it would cause your message to get rejected (a lot of spam is sent from infected home user IP addresses).

share|improve this answer
how to find out my MTA on linux? – Rohit Banga May 4 '10 at 17:03
why should outlook send through a relay SMTP server? If i am sending a mail to then it should directly contact mail server for gmail which is the destination mail server and not the relay server? right or wrong? – Rohit Banga May 4 '10 at 17:06
why do you use Gmail or ISP/work servers together? suppose I am sending from to shouldn't the sequence be app->b->d->recipient inbox. – Rohit Banga May 4 '10 at 17:08
did not understand third method. when i send using mailx, no mail lands up in my inbox and no mailer daemon notification is returned. why did my message disappear? For my organizations mail server however i do get a message saying that mail was not delivered as name could not be resolved. Why is that so? I remember that I used mailx to send messages this way on another system. Is there a configuration problem? – Rohit Banga May 4 '10 at 17:09
@iamrohitbanga 1) Check the list of installed packages. (Not all distros come with a MTA by default.) – grawity May 4 '10 at 17:10

mailx can use SMTP. It's configure file is ~/.mailrc

One example is mailx using Gmail's SMTP.

The configure can even be in one command:

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp:// \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \

If a normal SMTP server is used, it is much easier (see a detailed introduction here):

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://

You can also put these into mailx's configuration file ~/.mailrc

share|improve this answer
Note that this depends on heirloom-mailx which is not the default mailx. – Scott Apr 5 '12 at 2:37
@Scott: Yes. But depends on the Linux distribution. On some systems, the default is not heirloom (e.g. Ubuntu:… . seems there are 3 mailx versions). On some other ones such as Fedora, OpenSUSE, the default one is the "feature riched" "heirloom-mailx". – ericzma Apr 16 '12 at 9:41
@ericzma I guess heirloom-mailx is the best / is heirloom the only mailx that can do it(specifying from and smtp server at command line)? It works nicely on Debian though is not installed by default. On Debian mailx links to /etc/alternatives/mailx which links to /usr/bin/bsd-mailx After installing heirloom-mailx to debian, /etc/alternatives/mailx links to /usr/bin/heirloom-mailx and worked nicely – barlop Sep 26 '14 at 10:59
@barlop Your finding is consistent with mine: heirloom-mailx works while bsd-mailx does not. Not aware about other working implementations yet. – ericzma Oct 1 '14 at 6:49
CentOS 6.7 uses Heirloom mailx 12.4 – Joshua Grigonis Jan 26 at 0:39

there is an alternative without local mta like sendmail/postix.

debian package ssmtp

info from rpm description:

Summary     : Extremely simple MTA to get mail off the system to a Mailhub
URL         :
License     : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
            : hub. It contains no suid-binaries or other dangerous things - no mail spool
            : to poke around in, and no daemons running in the background. Mail is simply
            : forwarded to the configured mailhost. Extremely easy configuration.


Stefan K.

share|improve this answer
Almost... ssmtp is a MTA-like SMTP client. It behaves like /usr/bin/sendmail but instead of connecting directly to the MX record of a particular domain, it delegates this task to an SMTP server accessible (usually via username/password) to the machine running ssmtp. This is particularly useful for those system sending email from high spam IP ranges like ADSL dynamic IP ranges, dodgy hosting providers, etc. – Andre de Miranda Jan 27 '14 at 10:19

From the mailx(1) man page, DESCRIPTION section, String Options subsection:

   smtp   Normally, mailx invokes sendmail(8) directly to  transfer
          messages.  If the smtp variable is set, a SMTP connection
          to the server specified by the value of this variable  is
          used  instead.
share|improve this answer
this confused me a bit. can you be more elaborate. – Rohit Banga May 4 '10 at 14:18
Uhh... it uses sendmail unless this option is set. – Ignacio Vazquez-Abrams May 4 '10 at 14:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .