发送邮件时出错
我想用Python发送邮件。我有一个函数:
def mail():
fromaddr = 'mymail@gmail.com'
toaddrs = 'targetmail@o2.pl'
msg = 'There was a terrible error that occured and I wanted you to know!'
# Credentials (if needed)
username = 'mymail@gmail.com'
password = 'password'
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.ehlo()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
当我尝试执行这个函数时,出现了WinError 10060的错误。错误信息如下:
Traceback (most recent call last):
File "C:\python-factory\ServiceChecker\main\mainBlock.py", line 75, in <module> mail()
File "C:\python-factory\ServiceChecker\main\mainBlock.py", line 65, in mail server = smtplib.SMTP('smtp.gmail.com:587')
File "C:\Python34\Lib\smtplib.py", line 242, in __init__ (code, msg) = self.connect(host, port)
File "C:\Python34\Lib\smtplib.py", line 321, in connect self.sock = self._get_socket(host, port, self.timeout)
File "C:\Python34\Lib\smtplib.py", line 292, in _get_socket self.source_address)
File "C:\Python34\Lib\socket.py", line 509, in create_connection raise err
File "C:\Python34\Lib\socket.py", line 500, in create_connection sock.connect(sa)
TimeoutError: [WinError 10060]
我不知道问题出在哪里……我尝试了很多邮件服务器(比如gmail、o2、wp),结果都返回了同样的错误。我还在网上找了其他可用的解决方案来用Python发送邮件……结果还是同样的问题……
请帮帮我
3 个回答
0
toaddrs
应该是一个列表
toaddrs = ['targetmail@o2.pl']
0
试着去掉第二个 server.ehlo(),就是在登录之前的那个。这样做对我有效。
1
根据你提供的错误信息,你在这行代码出错了:
server = smtplib.SMTP('smtp.gmail.com:587')
我运行了这一行代码,结果是正常的。问题的关键在于 TimeoutError
。我觉得你可能遇到了网络问题,代码本身是没问题的。
你确实多调用了一次 ehlo
,但目前来看,你根本还没到那一步。
另外,建议把端口号作为一个单独的参数传递,而不是用冒号来分隔。例如:
server = smtplib.SMTP(host='smtp.gmail.com', port=587)
关于 smptlib 的文档可以在这里找到: https://docs.python.org/2/library/smtplib.html