Skip to main content
 首页 » 编程设计

python之在 python 中使用 smtplib 时出错

2025年05月04日9sky-heaven

我是 smtplib 的新手,想用它来自动化我公司的群发邮件发送过程。 我试过这个基本脚本 -

#!/usr/bin/env python 
import smtplib 
 
server = smtplib.SMTP('smtp.gmail.com:587') 
user_mail = '[user_email]@gmail.com' 
user_pwd = '[password]' 
rcv_mail = '[reciever_email]@yahoo.com' 
msg = 'Test' 
 
server.login(user_mail, user_pwd) 
 
server.ehlo() 
server.starttls() 
server.sendmail(user_mail, rcv_mail, msg) 
server.quit() 

我没有像在我的程序中那样使用这个脚本,这只是为了了解 smtplib 的工作原理。 我收到这个错误

Traceback (most recent call last): 
  File "sampleSMTP.py", line 4, in <module> 
    server = smtplib.SMTP('smtp.gmail.com. 587') 
  File "/usr/local/lib/python2.7/smtplib.py", line 256, in __init__ 
    (code, msg) = self.connect(host, port) 
  File "/usr/local/lib/python2.7/smtplib.py", line 316, in connect 
    self.sock = self._get_socket(host, port, self.timeout) 
  File "/usr/local/lib/python2.7/smtplib.py", line 291, in _get_socket 
    return socket.create_connection((host, port), timeout) 
  File "/usr/local/lib/python2.7/socket.py", line 557, in create_connection 
    for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
socket.gaierror: [Errno -2] Name or service not known 

之前在其他迭代中,我尝试使用电子邮件模块中的 MIMEMultipart 和 MIMEText,我也得到了其他异常作为输出,比如 ServerAuthenticationError(<- 我在这个中做了一些打印调试,发现异常是从server.login() 语句)。

我的请求是,有人可以向我解释这些异常并告诉我我需要做什么来摆脱它们吗?我不需要工作代码,只需要一个很好的解释。

编辑:之前有一个语法错误,我更正了。现在的异常(exception)是:

Traceback (most recent call last): 
File "sampleSMTP.py", line 10, in <module> 
    server.login(user_mail, user_pwd) 
File "/usr/local/lib/python2.7/smtplib.py", line 585, in login 
    raise SMTPException("SMTP AUTH extension not supported by server.") 
smtplib.SMTPException: SMTP AUTH extension not supported by server. 

我最初的问题是 - 这些异常是如何以及为什么在 smtplib 方法中引起的,我该如何解决它们?

请您参考如下方法:

创建 SMTP 对象时,您应该提供主机名作为 name:port。 所以,server = smtplib.SMTP('smtp.gmail.com.587') 是不正确的。 它应该是 server = smtplib.SMTP('smtp.gmail.com:587')。

如果在此之后出现错误,请引用此线程:How to send an email with Gmail as provider using Python?