已启动,cron无法从自动python脚本发送电子邮件,并失败,并显示:smtplib.SMTPServerDisconnected:请首先运行connect

问题描述

我想为我的网站设置自动备份,并为此创建一个有效的python脚本。为了进行调度,我首先尝试了launchd,然后尝试了cron,对于两者,我都得到了相同的结果,即备份有效,但电子邮件通知失败。

TerminalSublime Text 3启动该脚本后,该脚本可以100%正常工作,并且我使用的是macOS Catalina版本10.15.7。

launchdcron错误日志是这样的:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py",line 926,in _bootstrap_inner
    self.run()
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py",line 870,in run
    self._target(*self._args,**self._kwargs)
  File "/usr/local/lib/python3.7/site-packages/fast_email/fast_email.py",line 95,in send
    server.ehlo()
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py",line 440,in ehlo
    self.putcmd(self.ehlo_msg,name or self.local_hostname)
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py",line 367,in putcmd
    self.send(str)
  File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py",line 359,in send
    raise SMTPServerdisconnected('please run connect() first')
smtplib.SMTPServerdisconnected: please run connect() first

我的fast_email软件包中发生错误的部分(server.ehlo()行):

def send(msg_data,d):
    server = smtplib.SMTP_SSL(d['EMAIL_SERVER'],d['EMAIL_PORT'])
    server.ehlo()
    server.login(d['EMAIL_SENDER'],d['EMAIL_PASSWORD'])

    message = MIMEMultipart("alternative")
    message["From"] = d['EMAIL_SENDER']

如果可能的话,我在我的fast_email软件包中使用了线程(threading.Thread),因为有时我想向我公司的人快速发送电子邮件

这个问题非常令人沮丧,我仅花了整整一天的时间,更不用说启动的其他问题了……请,如果有任何提示,我将非常感谢。

P.S。我的cron工作专线是:

0 9 * * * (/usr/local/bin/python3 my/script/pathname.py > /Users/my_username/Desktop/cronjob.log 2>&1)

我有

<key>AbandonProcessGroup</key>
<true/>

在我启动的.plist文件中。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)