我试图解决为什么我的 Raspberry Pi 无法使用 ssmtp / mail-utils 发送电子邮件的问题,因此我打开了用于 Pi 的 gmail 帐户。令我惊讶的是,有 15,000 封未读电子邮件,它试图将电子邮件发送到电子邮件地址“pi@pi_name”,但显然被拒绝了(正在尝试发送到[电子邮件受保护])。这些电子邮件/拒绝大约每隔几分钟就会发生一次。拒绝是一回事(我一定是配置错误),但它让我困惑这里发生了什么。在我的系统中,crontab -u pi -l
我有以下内容(root 的 crontab 为空):
30 8 * * * python /.../text.py
* * * * * python /.../record.py
text.py 应该在每天 8:30 向我发送提醒,而 record.py 应该每分钟运行一次以录制一些音频。在发送的电子邮件中,电子邮件正文是 record.py 的输出(录制的音频详细信息)。我的直觉是,这些电子邮件与每分钟运行的 cron 作业相关(尽管这些电子邮件大约每 3 分钟发送一次),但 record.py 中没有任何地方提到发送电子邮件;它只是写入 MySQL 数据库。 text.py 使用命令发送电子邮件echo “body” | mail -s “subject” [email protected]
我对这里发生的事情感到困惑。我不知道这些电子邮件是从哪里发送的,而且今年一月份一切都按预期进行(我出国几个月时将我的 Pi 存储起来),并且我没有进行任何更改到它。
同样奇怪且可能相关的是,当我输入命令 python text.py 时,它会随机工作(可能有 5% 的机会?)并给我发短信,否则会出错send-mail: Cannot open smtp.gmail.com:587
。我不确定在什么情况下它会成功。
答案1
如果 cron 作业将任何内容打印到标准输出或标准错误,或者命令返回失败状态(即任何非零退出代码),则 cron 会向用户发送一封包含输出和状态代码的电子邮件。
电子邮件将通过本地电子邮件设施发送给用户,除非您通过将MAIL
crontab 中的变量设置为本地地址来覆盖该设置。如果您的本地电子邮件通过~/.forward
或或类似的方式转发/etc/aliases
,那么来自 cron 的电子邮件显然会像其他邮件一样被转发。如果用户的电子邮件无法送达,但管理员的电子邮件有效,则管理员(技术上:)postmaster
将收到退回邮件。
阅读这些电子邮件的内容以找出问题所在。如果每分钟的工作有时会失败,那么您可能会收到这些电子邮件。
如果您的 ISP 有时会拒绝您的电子邮件,这可能是由于您发送了大量电子邮件并且作为潜在的垃圾邮件发送者而受到速率限制。
答案2
我会查看代码以text.py
查看它在哪里发送电子邮件。然后我会用它作为起点来找出它发送它的原因。请注意,它可能不会直接尝试发送到 gmail,而是发送到本地地址(见下文)。
您record.py
可能会写信给标准输出或者标准错误在某一点。cron
选择此作为输出邮寄给您(作为 的所有者crontab
)。
我怀疑您在某个时候已将 Pi 进行配置,将发送到您本地帐户的电子邮件转发到异地地址[email protected]
。我将从查看/etc/aliases
和开始~/.forward
。