发送邮件时出错

-1 投票
3 回答
733 浏览
提问于 2025-04-18 07:17

我想用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

撰写回答