One of my servers has no real DNS name, there is no MX record and I can hardly confiture postfix for e-mail delivery. While relaying e-mails to another SMTP server is an option, it’s actually not needed to configure MTA in order to get emails delivered from cron and logwatch. One can use MUA called mailx to do the job.
The goal is to avoid more complex configuration of
postfix or (jeeeez)
sendmail, so this is an alternative approach. I am not telling you this is
the best thing you should do. It just works for few of my Linux servers. This
will work both on RHEL6 and RHEL7 and probably even older or newer versions.
And of course CentOS as well.
Vixie cron, the default cron in RHEL, uses
sendmail command for all emails.
This is actually part of
postfix package, delivery is handled by the MTA
which I actually wanted to avoid. In this tutorial, we will configure vixie
cron in RHEL7 to send e-mails via mailx user agent. First of all, get
# yum -y install mailx
Then edit either
/root/.mailrc as follows:
# cat /root/.mailrc set name="Server1234" set from="email@example.com" set smtp=smtps://smtp.gmail.com set smtp-auth=login set firstname.lastname@example.org set smtp-auth-password=mysecretpassword set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb
Make sure that
from address is same as
smtp-auth-user address, gmail
servers will insist on this. Server certificate is ignored, you may want to
install it into the NSS database. We are ready to send a test e-mail:
# mailx -r email@example.com firstname.lastname@example.org Subject: Test This is a test . EOT
There will be a warning on the standard error about unkonwn certificate. I suggest to put google server CA into the NSS database, but it’s harmless and you can keep it as is if you don’t mind man-in-the-middle.
Error in certificate: Peer's certificate issuer is not recognized.
Now, create a wrapper script that will explicitly set from and to addresses:
# cat /usr/local/sbin/mailx-r #!/bin/sh exec mailx -r email@example.com firstname.lastname@example.org
Make sure the script is executable. Finally, set it via crond command line option:
# cat /etc/sysconfig/crond CRONDARGS="-m /usr/local/sbin/mailx-r"
And restart crond:
# service crond restart
You are now receiving e-mails from cron, congratulations. The next step I
usually do is installing logwatch. Since it also uses
sendmail we want to
disable it and run it manually from our own cron script feeding the output to
# yum -y install logwatch
Disable the built-in daily report because this one uses
sendmail. While it
could be possible to change this via some configuration option, I actually like
my very own cron script.
# cat /etc/logwatch/conf/logwatch.conf DailyReport = no
Now, create your own script and feed the output into mailx. For a weekly report do something like:
# cat /etc/cron.weekly/logwatch #!/bin/bash logwatch --print --range 'between -7 days and today' | mailx -s "Logwatch from XYZ" -r email@example.com firstname.lastname@example.org 2>/dev/null
For a daily report do this:
# cat /etc/cron.daily/logwatch #!/bin/bash logwatch --print --range yesterday | mailx -s "Logwatch from XYZ" -r email@example.com firstname.lastname@example.org 2>/dev/null
Make sure the cron script is executable and test it first. That’s all, enjoy all the e-mails!