我试图使用python发送电子邮件(Gmail),但我得到以下错误。
Traceback (most recent call last):
File "emailSend.py", line 14, in <module>
server.login(username,password)
File "/usr/lib/python2.5/smtplib.py", line 554, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.
Python脚本如下所示。
import smtplib
fromaddr = 'user_me@gmail.com'
toaddrs = 'user_you@gmail.com'
msg = 'Why,Oh why!'
username = 'user_me@gmail.com'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
2022年12月更新:
您需要使用应用程序密码,以允许您的应用程序访问您的谷歌帐户。
使用应用程序密码登录:
应用程序密码是一个16位数的密码,给一个不太安全的应用程序或
设备权限以访问您的谷歌帐户。应用程序密码
仅用于已开启两步验证的帐户。
此外,谷歌自2022年5月30日起不允许您的应用程序使用用户名(电子邮件地址)和密码访问您的谷歌帐户。所以现在,你需要用户名(电子邮件地址)和应用程序密码来访问你的谷歌帐户。
不太安全的应用和你的谷歌账户:
为了保证您的账户安全,从2022年5月30日起,谷歌号
long支持使用第三方应用程序或设备来询问您
仅使用您的用户名和登录您的谷歌帐户
密码。
如何生成应用程序密码:
首先,从9个点中点击Account:
然后,点击安全中的应用程序密码。*不要忘记在生成应用程序密码之前打开两步验证,否则您无法生成应用程序密码:
然后,点击其他(自定义名称):
然后,输入你的应用程序名称,然后点击GENERATE:
最后,你可以生成应用程序密码xylnudjdiwpojwzm:
所以,你的代码与上面的应用程序密码如下所示:
import smtplib
fromaddr = 'user_me@gmail.com'
toaddrs = 'user_you@gmail.com'
msg = 'Why,Oh why!'
username = 'user_me@gmail.com'
password = 'xylnudjdiwpojwzm' # Here
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
另外,在Django中,带有上述应用程序密码的settings.py如下所示:
# "settings.py"
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'myaccount@gmail.com'
EMAIL_HOST_PASSWORD = 'xylnudjdiwpojwzm' # Here
你需要在直接运行到STARTTLS之前说EHLO:
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
此外,您应该真正创建From:、To:和Subject:消息头,用空行与消息体分隔,并使用CRLF作为EOL标记。
E.g.
msg = "\r\n".join([
"From: user_me@gmail.com",
"To: user_you@gmail.com",
"Subject: Just a message",
"",
"Why, oh why"
])
注意:
为了做到这一点,你需要在gmail帐户配置中启用“允许不太安全的应用程序”选项。否则,当gmail检测到一个非谷歌应用程序试图登录你的帐户时,你会得到一个“关键安全警报”。
在您的gmail帐户上启用不太安全的应用程序,并使用(Python>=3.6):
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
gmailUser = 'XXXXX@gmail.com'
gmailPassword = 'XXXXX'
recipient = 'XXXXX@gmail.com'
message = f"""
Type your message here...
"""
msg = MIMEMultipart()
msg['From'] = f'"Your Name" <{gmailUser}>'
msg['To'] = recipient
msg['Subject'] = "Subject here..."
msg.attach(MIMEText(message))
try:
mailServer = smtplib.SMTP('smtp.gmail.com', 587)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmailUser, gmailPassword)
mailServer.sendmail(gmailUser, recipient, msg.as_string())
mailServer.close()
print ('Email sent!')
except:
print ('Something went wrong...')
你可以在这里找到它:http://jayrambhia.com/blog/send-emails-using-python
smtp_host = 'smtp.gmail.com'
smtp_port = 587
server = smtplib.SMTP()
server.connect(smtp_host,smtp_port)
server.ehlo()
server.starttls()
server.login(user,passw)
fromaddr = raw_input('Send mail by the name of: ')
tolist = raw_input('To: ').split()
sub = raw_input('Subject: ')
msg = email.MIMEMultipart.MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = email.Utils.COMMASPACE.join(tolist)
msg['Subject'] = sub
msg.attach(MIMEText(raw_input('Body: ')))
msg.attach(MIMEText('\nsent via python', 'plain'))
server.sendmail(user,tolist,msg.as_string())