我想使用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
答案 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()
或执行我的操作,即同时指定服务器和端口地址,在这种情况下,无需调用connect
或ehlo
:>
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()