Cron Is Not Emailing Output: MAILTO and Logging
Cron mails any output a job prints to the crontab owner's local mailbox — but only if a mail transfer agent (like postfix or sendmail) is installed. On most servers there is none, so the mail silently disappears. Set MAILTO to choose the recipient, or skip mail entirely and redirect the output to a log file.
Why you get no mail
Cron pipes stdout+stderr to sendmail. If no MTA is installed, there is nothing to deliver the message and it is dropped. This is normal on minimal servers.
Choose the recipient
Add a MAILTO line above your jobs:
MAILTO=you@example.com0 * * * * /home/me/job.sh
To silence mail for a job, set MAILTO="" (empty) at the top of the crontab.
The reliable alternative: log to a file
0 * * * * /home/me/job.sh >> /var/log/job.log 2>&1
>> appends stdout, and 2>&1 sends stderr to the same place. Now every run is captured no matter what mail is configured — this is the recommended approach.
Getting real email out
If you truly want email, install and configure an MTA (postfix with a relay/SMTP smarthost) so the local mail cron produces can actually be sent.
FAQ
Why is cron not sending me email?
Cron only mails output if a mail transfer agent (postfix/sendmail) is installed. Without one the mail is dropped. Set MAILTO and install an MTA, or redirect output to a log file instead.
How do I set who gets cron emails?
Add MAILTO=you@example.com on a line above your jobs in the crontab. Use MAILTO="" to disable mail for the jobs below it.
How do I see cron job output without email?
Redirect it to a file: append >> /var/log/job.log 2>&1 to the command. This captures both stdout and stderr on every run.