无法使用 gmail 通过 python 发送电子邮件 - smtplib.SMTPException:服务器不支持 SMTP AUTH 扩展
Posted
技术标签:
【中文标题】无法使用 gmail 通过 python 发送电子邮件 - smtplib.SMTPException:服务器不支持 SMTP AUTH 扩展【英文标题】:Cant send email via python using gmail - smtplib.SMTPException: SMTP AUTH extension not supported by server 【发布时间】:2013-11-14 21:58:00 【问题描述】:我只想在 python 中发送一封带有附件的电子邮件
import smtplib, os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
def send_mail(send_from, send_to, subject, text, files=[], server="localhost"):
assert type(send_to)==list
assert type(files)==list
msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = COMMASPACE.join(send_to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject
msg.attach( MIMEText(text) )
for f in files:
part = MIMEBase('application', "octet-stream")
part.set_payload( open(f,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
msg.attach(part)
smtp = smtplib.SMTP('smtp.gmail.com:587')
smtp.login('fu@gmail.com','fu')
smtp.sendmail(send_from, send_to, msg.as_string())
smtp.close()
ATTACHMENTS = ['/tmp/2013-11-04-test.csv']
send_from=['fu@gmail.com']
send_to=['fu@gmail.com']
subject='adfadfadf'
text = 'adfadfadf'
send_mail(send_from, send_to, subject, text, files=ATTACHMENTS)
我如何进行身份验证?我必须提供用户名和密码。怎么样?
Traceback (most recent call last):
File "/home/ubuntu/workspace/miliza-devops/classes/utilities.py", line 133, in <module>
send_mail(send_from, send_to, subject, text, files=ATTACHMENTS)
File "/home/ubuntu/workspace/miliza-devops/classes/utilities.py", line 124, in send_mail
smtp.login('fu@gmail.com','fu')
File "/usr/lib/python2.7/smtplib.py", line 576, in login
raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.
【问题讨论】:
Trying to send email (Gmail as mail provider) using Python 的可能重复项 【参考方案1】:您需要在登录前致电starttls()
:
smtp = smtplib.SMTP('smtp.gmail.com:587')
smtp.starttls()
smtp.login('fu@gmail.com', 'fu')
另外,您的send_from
应该是str
,而不是list
:
send_from='fu@gmail.com'
注意smtp.starttls()
隐式调用smtp.ehlo()
:
如果此会话之前没有 EHLO 或 HELO 命令,则此方法首先尝试 ESMTP EHLO。 https://docs.python.org/2/library/smtplib.html#smtplib.SMTP.starttls
【讨论】:
【参考方案2】:在 gmail 上,您还必须在 smtp.starttls()
之前提供 smtp.ehlo()
这也是How to send an email with Gmail as provider using Python?的副本
【讨论】:
以上是关于无法使用 gmail 通过 python 发送电子邮件 - smtplib.SMTPException:服务器不支持 SMTP AUTH 扩展的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 gmail 从新创建的电子邮件中使用 phpMailer 发送 SMTP 邮件 [重复]
无法通过 nodemailer 发送电子邮件 |发件人“电子邮件 id@gmail.com>”无效