使用python发送电子邮件时发生超时错误

时间:2019-08-21 19:39:47

标签: python

我想使用python发送电子邮件。该代码在下面列出。如何解决操作超时问题?

我已经打开了不太安全的应用程序。

from email.mime.text import MIMEText
import smtplib

from_addr = 'my@gmail.com'
to_addr = 'to@gmail.com'
password = 'mypass'

server = smtplib.SMTP('smtp.gmail.com')
server.connect('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(from_addr, password)
msg = MIMEText('send my python', 'plain', 'utf-8')

server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()

这是响应:

Traceback (most recent call last):
  File "/Users/daniel/PycharmProjects/风便/email_send.py", line 9, in    <module>
server = smtplib.SMTP('smtp.gmail.com')
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py", line 251, in __init__
(code, msg) = self.connect(host, port)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py", line 336, in connect
self.sock = self._get_socket(host, port, self.timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/smtplib.py", line 307, in _get_socket
self.source_address)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 727, in create_connection
raise err
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/socket.py", line 716, in create_connection
sock.connect(sa)
TimeoutError: [Errno 60] Operation timed out

1 个答案:

答案 0 :(得分:0)

当我在桌面上尝试您的代码(当然是用我的凭据代替)时,我遇到了一个稍微不同的错误:

OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

但是我们似乎在不同的平台上运行。服务器对象的构造函数的文档表明,如果您未同时指定服务器地址和端口,则不会显式完成连接,而仅指定服务器地址。但事实并非如此。如果仔细查看堆栈跟踪,您会发现服务器对象的构造过程中发生了异常,并且在此构造过程中,它正在调用connect方法,假定其端口值为0,即构造函数的默认端口参数值。在Windows平台上,使用端口0会导致不同类型的异常。解决方案是在构造服务器对象时不指定任何参数:

server = smtplib.SMTP()

或执行我的操作,即同时指定服务器端口地址,在这种情况下,无需调用connectehlo

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(from_addr, password)
msg = MIMEText('send my python', 'plain', 'utf-8')
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
相关问题