从 crond 调用 mailx

从 crond 调用 mailx

我遇到了一个问题,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.

相关内容