【问题标题】:Error sending email by calling a bash script通过调用 bash 脚本发送电子邮件时出错
【发布时间】:2014-11-14 03:14:02
【问题描述】:

我在 Raspbian OS 上的 sendmail.sh 脚本能够成功发送电子邮件。但是,当从 python 脚本调用它时,我会收到 "mail: can not send message: process exited with non zero status" 错误消息。我已经通过手动运行sendmail.sh 验证了 ssmtp 配置正确。

sendmail.sh

#!/bin/bash
echo "test" | mail -s "test msg" myemailaddress

sendmail.sh 的权限是 777。sendmail.sh 和 sendmail.py 在同一个目录中。

sendmail.py

import os
import subprocess
subprocess.call(['./sendmail.sh'])

我用来运行python的命令-sudo python sendmail.py

我不明白为什么会发生错误。显然,python 正在调用sendmail.sh,并且脚本设置了正确的权限。如果手动运行sendmail.sh,邮件发送正确。

【问题讨论】:

  • 顺便说一句,请使用check_call 而不是call,除非您手动检查退出状态(显然,您没有)。
  • 无论您遇到什么问题,chmod 777 都是错误且危险的。请立即将权限恢复为正常的权限(0755 在这里似乎很合适)。
  • 调用脚本是否在不同的目录中运行?然后./sendmail.sh 将是“找不到文件”错误。 (为什么要将功能拆分为两个单独的脚本?)

标签: python bash email subprocess ssmtp


【解决方案1】:

根本原因是ssmtpmail给出的错误信息,最没有帮助。

快速搜索它会显示http://www.raspberrypi.org/forums/viewtopic.php?t=46218&p=386393,其中包含以下内容:

尝试运行带有附加 -d 参数的命令以获得更多调试信息,以帮助确定问题的原因:

回显“测试”| mail -d -s "测试" myemail@mydomain.co.uk

<...>

我检查了我的错误日志,并注意到了这一点:

raspberrypi sSMTP[3477]:

【讨论】:

  • 感谢您对设置调试标志的建议。从调试中我发现了问题。在这种情况下,python 和 shell 的脚本归用户“pi”所有。但是对于我需要做的工作,python 需要作为 sudo 运行,因为从这个 python 脚本中调用 shell,所以 shell 脚本作为“sudo”运行。因为 ssmtp 被配置为仅作为“pi”用户发送电子邮件,python 脚本在执行 sendmail.sh 时给出错误。
  • 感谢所有花时间回答问题的人。感谢您的帮助。
【解决方案2】:

你可以试试这个命令:

os.system('./sendmail.sh')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2016-06-03
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多