RPi 1B开机自启Python按键拍照脚本时Mutt发送邮件失败求助
问题根因
Mutt的用户级配置默认存放在当前用户家目录的.muttrc文件内,手动执行脚本时使用的是已配置好邮箱参数的pi用户,所以功能正常;但你将开机启动规则添加到了root用户的crontab中,程序以root身份运行时会读取/root/.muttrc路径下的配置,该路径不存在对应Mutt配置,因此邮件发送失败。
排查思路
- 查看已有的cron日志定位报错:你已经配置了启动日志输出到
/home/pi/logs/cronlog,执行命令cat /home/pi/logs/cronlog即可看到Mutt运行时的具体错误,常见报错包含「无法找到配置文件」「SMTP认证失败」等。 - 模拟root身份运行验证问题:执行
sudo python /home/pi/doorbell02.py,手动触发按键测试邮件发送功能,如果同样失败即可确认是用户身份差异导致的问题。
解决方法
两种方案任选其一即可:
方案1:将启动任务放在pi用户的crontab中(推荐)
- 删除root用户crontab中的原有规则:执行
sudo crontab -e,删掉对应的@reboot配置行后保存退出。 - 编辑pi用户的crontab:执行
crontab -e(无需加sudo),添加相同的启动规则:
@reboot sh /home/pi/launcher.sh >/home/pi/logs/cronlog 2>&1
- 重启设备测试即可,此时脚本以pi用户身份运行,可直接读取已有的Mutt配置,邮件发送功能恢复正常。
方案2:为root用户配置Mutt运行环境
- 复制pi用户的Mutt配置到root家目录:执行
sudo cp /home/pi/.muttrc /root/ - 如果Mutt依赖其他授权文件、证书文件,也一并复制到root用户对应的路径下,或者直接在调用Mutt的命令中指定配置文件路径,修改Python脚本中的Mutt调用代码:
subprocess.call("echo "" | mutt -F /home/pi/.muttrc -s 'Someone at the door' -i /home/pi/messageBody.txt myname@mailprovider.com -a %s" % filename, shell=True)
注意:要把脚本中用到的
messageBody.txt等相对路径的文件替换为绝对路径,避免不同用户运行时找不到文件。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

