我正在尝试创建一个脚本发送电子邮件,使用Gmail。但是,当运行下面的代码行时,我的代码会冻结:
smtplib.SMTP("smtp.gmail.com", 587)
这是在输入我的用户名和密码之前,所以它与我的Gmail帐户无关。为什么会发生这种情况?我使用的是Python 3.6.3
完整代码如下:
import smtplib
# Specifying the from and to addresses
fromaddr = 'XXX@gmail.com'
toaddrs = 'YYY@gmail.com'
# Writing the message (this message will appear in the email)
msg = 'Enter you message here'
# Gmail Login
username = 'XXX@gmail.com'
password = 'PPP'
# Sending the mail
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
发布于 2018-05-31 21:43:02
这很可能是防火墙或类似的问题。在出现问题的计算机上,尝试在命令行上运行以下命令:
ping smtp.gmail.com
假设这是可行的,那么试一下:
telnet smtp.gmail.com 587
我假设一台Linux机器上有这个命令。你需要适应其他人。如果连接成功,输入ehlo list
,命令应该会显示一些信息。键入quit
退出。
如果这不起作用,那么请检查iptables。
sudo iptables -L
这将在Chain INPUT
下显示类似ACCEPT all
的内容,如果没有,您将需要确保您正在接受已建立的连接,如下所示:
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
输出链通常是开放的,但您也应该检查这一点。
如果您使用的是AWS,请检查您的安全组是否未阻止传出连接。
发布于 2018-05-31 20:20:33
在代码中使用server.ehlo()
。
代码片段:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
对于身份验证错误:http://joequery.me/guides/python-smtp-authenticationerror/
添加以下代码片段并再次运行。
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.close()
print 'successfully sent the mail'
except:
print "failed to send mail"
https://stackoverflow.com/questions/50624003
复制相似问题