When cron jobs send email notifications through nullmailer configured with remote SMTP, the default "From" address often shows as root@hostname, which can cause delivery issues if your SMTP provider requires specific sender authorization.
Most SMTP services (like Gmail, SendGrid, or AWS SES) enforce strict sender verification. If your cron's From header doesn't match an authorized address, emails either get rejected or marked as spam.
Nullmailer respects the MAILFROM environment variable. Add this to your crontab before commands:
MAILFROM="yourname@domain.com" 0 * * * * /path/to/your/script.sh
Edit /etc/nullmailer/remotes and append the envelope sender after your SMTP settings:
smtp.yourprovider.com smtp --port=587 --user=login --pass=password --ssl --from="Your Name <yourname@domain.com>"
Create /etc/mailname containing just your domain:
yourdomain.com
Verify with this cron job (temporarily):
* * * * * echo "Test email" | mail -s "Cron From Test" recipient@example.com
- Check
/var/log/mail.logfor delivery errors - Use
nullmailer-inject --verbose recipient@example.comfor testing - Ensure your SMTP provider allows the From address you're trying to use
When cron jobs send email notifications through nullmailer with remote SMTP, many systems default to using root@hostname as the sender address. This becomes problematic when:
- Your SMTP provider requires specific authorized sender addresses
- Corporate email filters block "root@" addresses
- You want recipient filtering based on sender domain
The key configuration file is /etc/nullmailer/remotes which defines SMTP server details. But for From address control, we need to modify additional files:
# Example remotes file content
smtp.yourprovider.com smtp --port=587 --starttls --user=me@ya.ru --pass=mypassword
Create or edit /etc/nullmailer/defaultfrom:
me@ya.ru
For per-job control, set the MAILFROM environment variable in your cron job:
0 * * * * MAILFROM="service-alerts@ya.ru" /path/to/script.sh
For complete control, use formail in your cron command:
0 * * * * /path/to/script.sh | formail -a "From: My Service <me@ya.ru>" | sendmail -t
This approach gives you:
- Custom display names
- Different addresses per job
- Header consistency with your domain
If changes don't take effect:
- Restart nullmailer:
sudo systemctl restart nullmailer - Check mail logs:
journalctl -u nullmailer - Verify file permissions (should be root:mail 640)