这是一个关于通过经过身份验证的SMTP(不是gmail)发送电子邮件的问题。下面的脚本是通过本网站上的各种问题和答案组合在一起的,但是我得到的错误是没有“googlable”候选人用于这个特定的工具组合。我在Python 3.5.1中工作,它产生了这个错误:
邮件失败; [SSL:UNKNOWN_PROTOCOL]未知协议(_ssl.c:645)
这是客户端错误还是服务器?我错过了一些我不知道的证书吗? AFAIK服务器支持SSL身份验证。任何想法和推动正确的方向将不胜感激。
import sys
from smtplib import SMTP_SSL as SMTP
from email.mime.text import MIMEText
# credentials masked, obviously
SMTPserver = 'myserver'
sender = 'mymail'
destination = ['recipient']
USERNAME = "myusername"
PASSWORD = "mypass"
# typical values for text_subtype are plain, html, xml
text_subtype = 'plain'
content = """\
Test message
"""
subject = "Sent from Python"
try:
msg = MIMEText(content, text_subtype)
msg['Subject'] = subject
msg['From'] = sender
conn = SMTP(host=SMTPserver, port=465)
conn.set_debuglevel(False)
conn.login(USERNAME, PASSWORD)
try:
conn.sendmail(sender, destination, msg.as_string())
finally:
conn.quit()
except Exception as exc:
sys.exit("mail failed; %s" % str(exc))
答案 0 :(得分:9)
感谢我的问题下的两位评论员。通过设置
导航SSL后from smtplib import SMTP as SMTP
并在创建STMP对象后启用TLS(如果我没有使用正确的术语,请原谅我)
conn = SMTP(host=SMTPserver, port=587) # object created
conn.ehlo()
conn.starttls() # enable TLS
conn.ehlo()
我能够发送电子邮件。
答案 1 :(得分:6)
我遇到了同样的问题。我刚刚改变:
EMAIL_USE_SSL = True
要:
EMAIL_USE_TLS = True