socket.gaierror:[Errno 11001] getaddrinfo失败

时间:2013-08-23 10:11:38

标签: python

我曾尝试使用python将文件附加到邮件中。 代码:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from smtplib import SMTPException


def send_Email():
    file1="abc.txt"
    message = "Test mail"
    msg = MIMEMultipart()

    msg.attach(MIMEText(file(file1).read()))

    try:
        smtpObj = smtplib.SMTP('smtp server name',port)
        smtpObj.sendmail(sender, EmailId, message, msg.as_string() )
        print "Successfully sent email"
    except SMTPException:
        print "Error: unable to send email"

Bt我收到错误:socket.gaierror:[Errno 11001] getaddrinfo失败

完整的错误消息:

 File "C:\Python27\lib\smtplib.py", line 249, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python27\lib\smtplib.py", line 309, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Python27\lib\smtplib.py", line 284, in _get_socket
    return socket.create_connection((port, host), timeout)
  File "C:\Python27\lib\socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno 11001] getaddrinfo failed

9 个答案:

答案 0 :(得分:5)

问题是“smtp服务器名称”的DNS查找失败 - 如果这是您的确切代码,那么您可以看到原因 - 如果没有,并且您具有SMTP服务器的有效限定名称,那么您可能遇到问题防火墙/互联网连接等,也必须将端口设置为有效值以匹配您的服务器SMTP配置(通常端口25 并非绝对总是如此。)

答案 1 :(得分:5)

我确信当你在代理人后面工作时会出现gaierror。

答案 2 :(得分:0)

在我的情况下是一个主机问题。使用调试模式,我发现在(主机,端口,0,SOCK_STREAM)中,我得到了 host = local ,它应该是 host = localhost 。 在run.py中,我定义了 localhost ,文件主机(c:\ windows \ system32 \ drivers \ etc \ hosts)被定义了 local 。 它们必须相等,否则您将获得socket.gaieeror。

答案 3 :(得分:0)

urllib3 1.25.9版软件包中似乎存在一个错误。这为我产生了“ socket.gaierror:[Errno 11001] getaddrinfo失败”错误(从经过身份验证的代理服务器后面工作)。 降级到urllib3 1.25.8版可以解决此问题。

答案 4 :(得分:0)

以下答案可能与该问题无关。但是,某些用户可能会有不同的情况。

如果只能通过VPN访问服务器,并且如果我们尝试在VPN断开连接的情况下访问服务器,则会出现此错误:“ gaierror:[Errno 11001] getaddrinfo失败”。

连接到VPN,然后执行代码应该可以正常工作。

答案 5 :(得分:0)

您可能在settings.py文件中犯了一个小错误。 在设置文件中再检查一次代码 settings.py:

EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your_email'
EMAIL_HOST_PASSWORD = 'your_password'
EMAIL_PORT = 587
EMAIL_USE_TLS=True

答案 6 :(得分:-1)

您需要使用凭据登录。试试:

 smtpObj = smtplib.SMTP('smtp server name',port)

 smtpObj .starttls() 
 smtpObj .login(email, password)
 smtpObj.sendmail(sender, EmailId, message, msg.as_string() )
 print "Successfully sent email"

答案 7 :(得分:-1)

我希望你们以管理员身份运行文件,例如 以管理员身份打开cmd,然后 类型 将C:\放入您的.py文件路径 然后输入 python filename.py

它为我工作。 祝你好运

答案 8 :(得分:-1)

您需要为您的主机邮件激活 IMAP/SMTP 服务。