为什么当我从批处理文件使用 smtplib 运行 脚本时得到 "No SSL included in this python" 而当我手动 运行 时却没有?
Why do I get a "No SSL included in this python" when I run script using smtplib from a batch file but not when I run it manually?
我可以使用 smtplib 从脚本中正常发送电子邮件,但是当我尝试从批处理文件或任务计划程序中 运行 发送电子邮件时,一切正常,除了电子邮件最后没有发送。我收到 "No SSL" 错误。
我是在 conda 环境中 运行 进行此操作的,但我已经仔细检查过我是从该环境中调用 python 的,而不是在 base 中。
python 版本 3.7.3。
我从另一个脚本调用此函数并将电子邮件主题和消息传递给该函数。
def send_log_email(subject, message):
smtp_server = 'smtp.office365.com'
smpt_port = 25
sender = '[emailed address]'
pw = '[password]'
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = sender
msg['Subject'] = subject
msg.attach(MIMEText(message))
conn = SMTP(smtp_server,smtp_port)
conn.set_debuglevel(1)
conn.starttls()
conn.login(sender, pw)
conn.sendmail(sender, sender, msg.as_string())
这是我从批处理文件 运行 得到的错误。
send: 'ehlo []\r\n'
reply: b'250-Outlook Hello [IP]\r\n'
reply: b'250-SIZE 157286400\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-DSN\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250-STARTTLS\r\n'
reply: b'250-8BITMIME\r\n'
reply: b'250-BINARYMIME\r\n'
reply: b'250-CHUNKING\r\n'
reply: b'250 SMTPUTF8\r\n'
reply: retcode (250); Msg: b'outlook' Hello [IP]\nSIZE 157286400\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\nSTARTTLS\n8BITMIME\nBINARYMIME\nCHUNKING\nSMTPUTF8'
send: 'STARTTLS\r\n'
reply: b'220 2.0.0 SMTP server ready\r\n'
reply: retcode (220); Msg: b'2.0.0 SMTP server ready'
Traceback (most recent call last):
File "path\my_script.py", line 136, in <module>
send_log_email(result, message)
File "path\my_email_script.py", line 31, in send_log_email
conn.starttls()
File "python_path\custom_environment\lib\smtplib.py", line 756, in starttls
raise RuntimeError("No SSL support included in this Python")
RuntimeError: No SSL support included in this Python
与我在网上找到的大部分内容相反,我需要在批处理文件中激活环境,以便从任务计划程序中正确获取脚本 运行。
call C:\ProgramData\Anaconda3\Scripts\activate.bat
"C:\my_env_path\python.exe" "C:\my_script_path\my_script.py"
call C:\ProgramData\Anaconda3\Scripts\deactivate.bat
不确定我是否真的需要停用环境,但确实需要。
我可以使用 smtplib 从脚本中正常发送电子邮件,但是当我尝试从批处理文件或任务计划程序中 运行 发送电子邮件时,一切正常,除了电子邮件最后没有发送。我收到 "No SSL" 错误。
我是在 conda 环境中 运行 进行此操作的,但我已经仔细检查过我是从该环境中调用 python 的,而不是在 base 中。
python 版本 3.7.3。
我从另一个脚本调用此函数并将电子邮件主题和消息传递给该函数。
def send_log_email(subject, message):
smtp_server = 'smtp.office365.com'
smpt_port = 25
sender = '[emailed address]'
pw = '[password]'
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = sender
msg['Subject'] = subject
msg.attach(MIMEText(message))
conn = SMTP(smtp_server,smtp_port)
conn.set_debuglevel(1)
conn.starttls()
conn.login(sender, pw)
conn.sendmail(sender, sender, msg.as_string())
这是我从批处理文件 运行 得到的错误。
send: 'ehlo []\r\n'
reply: b'250-Outlook Hello [IP]\r\n'
reply: b'250-SIZE 157286400\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-DSN\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250-STARTTLS\r\n'
reply: b'250-8BITMIME\r\n'
reply: b'250-BINARYMIME\r\n'
reply: b'250-CHUNKING\r\n'
reply: b'250 SMTPUTF8\r\n'
reply: retcode (250); Msg: b'outlook' Hello [IP]\nSIZE 157286400\nPIPELINING\nDSN\nENHANCEDSTATUSCODES\nSTARTTLS\n8BITMIME\nBINARYMIME\nCHUNKING\nSMTPUTF8'
send: 'STARTTLS\r\n'
reply: b'220 2.0.0 SMTP server ready\r\n'
reply: retcode (220); Msg: b'2.0.0 SMTP server ready'
Traceback (most recent call last):
File "path\my_script.py", line 136, in <module>
send_log_email(result, message)
File "path\my_email_script.py", line 31, in send_log_email
conn.starttls()
File "python_path\custom_environment\lib\smtplib.py", line 756, in starttls
raise RuntimeError("No SSL support included in this Python")
RuntimeError: No SSL support included in this Python
与我在网上找到的大部分内容相反,我需要在批处理文件中激活环境,以便从任务计划程序中正确获取脚本 运行。
call C:\ProgramData\Anaconda3\Scripts\activate.bat
"C:\my_env_path\python.exe" "C:\my_script_path\my_script.py"
call C:\ProgramData\Anaconda3\Scripts\deactivate.bat
不确定我是否真的需要停用环境,但确实需要。