Simple Email Sending on Linux

You have a script and you want to send an email, or worse, someone else has a program and they are sending an email. Many programs expect something that is sendmail compatible to available on your system, e.g. cron scripts.

Rather than install a mail transfer agent and/or mail delivery agent and/or mail user agent, and god knows what other pieces that make up a proper mailbox, we can install something that just sends emails.

$ sudo pacman -S msmtp msmtp-mta

msmtp is the small program that does the sending and msmtp-mta provides sendmail compatibility at /usr/bin/sendmail. The program requires a working internet connection as it cannot queue emails. That’s how simple it is.

We can use a 3rd party SMTP server such as SendGrid or Gmail with the configuration at /etc/msmtprc (0640 root:mail):

defaults
aliases /etc/aliases
port 587
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
syslog on

account sendgrid
host smtp.sendgrid.net
auth on
user apikey
password ACTUALAPIKEYHERE
auto_from on
maildomain em.example.com

account default : sendgrid

There are a few tweaks to including enabling logging, automatically setting a FROM email that is user@maildomain.tld, using the SendGrid account to send emails by default if one is not otherwise specified, and finally setting up some aliases.

We’ll set up a default alias in /etc/aliases (0640 root:mail):

default: receiver@example.com

Add yourself to mail: gpasswd -a <YOU> mail (check with id).

We can test it with (the default alias will be mapped to the real recipient email address defined earlier):

$ printf "Subject: Hello World\n\Or rather just me.\n" | msmtp default

Also, mail default works as an alternative.

Notes

  • We are using the mail group to avoid leaking our plaintext password from the configuration file. We can also use ~/.msmtprc if we need to isolate sending accounts from other users/applications.
  • We just printf because echo doesn’t seem to new-line properly.
  • We set the subject, but we should also set To: properly.
  • Not sure how to get it to work with SendGrid’s domain white-listing, but it doesn’t really matter if you’re just emailing yourself.
  • mail has a terrible UX as I cannot do anything more than set a subject, when really it should be immediately obvious how to write the body of the email rather than just the subject.

The Arch Linux Wiki has more details!


Read and write comments on the discussion.