我遇到了一个问题,gmail 阻止使用 mailx 发送的电子邮件。我通过设置适当的 ~/.mailrc 解决了这个问题,如下所示:
set smtp-use-starttls
set nss-config-dir=/home/theuser/.certs
set ssl-verify=ignore
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=xxx
set smtp-auth-password=yyy
set from="[email protected](Rabbit Server)"
所以现在当我跑步时:
echo "hi" | mailx [email protected]
我的电子邮件以用户和 root 身份成功发送。
现在我希望 cron 也能工作。我更改了“/etc/sysconfig/crond”以强制它使用 mailx,其中:
CRONDARGS="-m /usr/bin/mailx"
我已将 ~/.mailrc 设置为:
- /root/.mailrc
- /home/theuser/.mailrc
- /etc/.mailrc
但无论我做什么,回显输出都没有通过电子邮件成功发送。
crontab 看起来像(我已经检查过,脚本正在运行并完成其工作,并且回显,只是 cron 不发送电子邮件):
MAILTO="[email protected]"
# Every minute check processes are running, restart if necessary and send an email.
* * * * * source /home/theuser/.bashrc; global audit_regular
# Every day, send an email describing the state of the host and its jobs.
0 5 * * * source /home/theuser/.bashrc; global audit_daily
# Every Monday at 7am, archive the logs.
0 7 * * 1 source /home/theuser/.bashrc; global archive_logs
此外,这个 crontab 是在另一台主机上设置的并且可以正常发送电子邮件。
答案1
mailx
仅当您在命令行上传递目标地址时才发送邮件。当您不带参数运行它时,它会从其标准输入读取交互式命令。请注意,您的测试向其提供了垃圾,这些垃圾已被解释为命令;其中一些命令可能会损坏您的邮箱、发送电子邮件等。
告诉mailx
运行mailx -t
,它需要标准输入上包含标题的完整电子邮件。
从粗略的检查来看,您似乎无法通过 crond 启动脚本传递带参数的命令。所以写一个shell包装器/usr/local/sbin/mailx-t
#!/bin/sh
exec mailx -t
并CRONDARGS="-m /usr/local/sbin/mailx-t"
放入/etc/sysconfig/crond
.