Python通过Gmail发送电子邮件失败

时间:2015-05-30 10:50:27

标签: python gmail

我正在使用这段代码:

import smtplib

fromaddr = 'fromuser@gmail.com'
toaddrs  = 'myemail@gmail.com'
msg = 'There was a terrible error that occured and I wanted you to know!'


# Credentials (if needed)
username = 'myusername'
password = 'passwd'

# The actual mail send
server = smtplib.SMTP_SSL('smtp.gmail.com',465)
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

我收到此错误:

  

Traceback(最近一次调用最后一次):文件“C:/Python34/sendemail.py”,   第15行,在       server.starttls()文件“C:\ Python34 \ lib \ smtplib.py”,第673行,在starttls中       提升SMTPException(“服务器不支持STARTTLS扩展名。”)smtplib.SMTPException:服务器不支持STARTTLS扩展名。

当我执行exculde server.starttls()时,我收到有关身份验证的不同错误消息。当我使用webdriver和凭证通过网络浏览器访问Gmail时,我还有另一个代码价格,因此我复制并粘贴到此代码以确保凭据正确无误。

我无法弄清楚为什么这不起作用。

提前致谢。

4 个答案:

答案 0 :(得分:3)

您还必须看到here

使用端口587

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

答案 1 :(得分:0)

使用此代码时,通过Gmail发送功能对我有用。请注意,我使用smtplib.SMTP()而不是smtplib.SMTP_SSL('smtp.gmail.com',465)也尝试使用端口587而不是465。

server = smtplib.SMTP()
server.connect(server, port)
server.ehlo()
server.starttls()
server.login(username, password)
server.sendmail(send_from, send_to, msg)
server.close()

虽然我发现使用emails库更容易。

答案 2 :(得分:0)

请尝试yagmail。免责声明:我是维护者,但我觉得它可以帮助所有人!

它确实提供了很多默认设置:我很确定您可以直接发送电子邮件:

import yagmail
yag = yagmail.SMTP(username, password)
yag.send(to_addrs, contents = msg)

您必须首先安装yagmail

pip install yagmail  # python 2
pip3 install yagmail # python 3

一旦你想要嵌入html /图像或添加附件,你真的喜欢这个包!

它还可以防止您在代码中输入密码,从而使其更加安全。

答案 3 :(得分:0)

你要么使用smtplib.SMTP()然后使用starttls()(我不推荐),要么单独使用smtplib.SMTP_SSL()(之后不要使用starttls())