For a long time I struggled with setting up cronjobs properly. It always took a lot of trial and error. Most of the times this was due to an environment problem (or a typo). You could test your cronjob but it would also be nice to be notified whenever something goes wrong (such as your backup script failing).
I had actually seen this output in the syslog before but never really cared much about it:
(CRON) info (No MTA installed, discarding output)
cron sends an email whenever a cronjob has an output, unless of course it cannot send the email.
So I recently set up msmtp on my server(s). I started with these instructions but in the end this is how it is working for me:
- Install msmtp:
apt install msmtp
- Create the config file
msmtprc
in /etc
(you might also need one for each user who wants to send email in ~/.msmtprc
)- I tried to use gpg for password management to avoid storing the password as plain text. However, gpg encrypted passwords can not be decrypted with cron/sendmail. If you can, use a dedicated email account for this purpose.
- Set
chmod
for those files to 0600
, otherwise msmtp
will complain (“sendmail: /home/<user>/.msmtprc: contains secrets and therefore must have no more than user read/write permissions”)
- For cron to know where to send email to you need to do one of the following:
- specify default email in
/etc/aliases
- specify
MAILTO=recipient@domain.tld
in the crontab
- Finally, cron uses
sendmail
to send out emails.
For msmtp v1.8.8+ install msmtp-mta and set the set_from_header
configuration setting to on
. The from address can be set to “something <server@domain.tld>” to customize the name display.
For older versions, you could just install the msmtp-mta package. However, you then get a From header in the emails as “root (Cron Daemon) <>”. If you want to customize this, create a sendmail
alias in /usr/sbin
. This is especially handy if you set this up for several servers and want to see which server an email is coming from. Follow these instructions to properly set it up.
msmtp configuration
# find out more about the configuration here: https://marlam.de/msmtp/msmtprc.txt
# Set default values for all following accounts.
defaults
auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp
aliases /etc/aliases
set_from_header on
# server
account server
host mail.domain.tld
port 587
from "cron@srv <server@domain.tld>"
user server@domain.tld
password
# Set a default account
account default : server