如何使用 Python 以 Gmail 作为提供商发送电子邮件?

新手上路,请多包涵

我正在尝试使用 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()

原文由 mahoriR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 732
2 个回答

在直接运行 EHLO STARTTLS

 server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()


Also you should really create From: , To: and Subject: message headers, separated from the message body by a blank line and use CRLF as EOL 标记。

例如

msg = "\r\n".join([
  "From: user_me@gmail.com",
  "To: user_you@gmail.com",
  "Subject: Just a message",
  "",
  "Why, oh why"
  ])

笔记:

为了使其正常工作,您需要在您的 gmail 帐户配置中启用“允许安全性较低的应用程序”选项。否则,当 gmail 检测到非 Google 应用程序正在尝试登录您的帐户时,您将收到“严重安全警报”。

原文由 MattH 发布,翻译遵循 CC BY-SA 4.0 许可协议

def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

如果你想使用端口 465,你必须创建一个 SMTP_SSL 对象:

 # SMTP_SSL Example
server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)
# ssl server doesn't support or need tls, so don't call server_ssl.starttls()
server_ssl.sendmail(FROM, TO, message)
#server_ssl.quit()
server_ssl.close()
print 'successfully sent the mail'

原文由 David Okwii 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题