【问题标题】:socket.gaierror: [Errno 11001] getaddrinfo failedsocket.gaierror:[Errno 11001] getaddrinfo 失败
【发布时间】:2013-08-23 10:11:37
【问题描述】:

我尝试使用 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"

我得到了错误:socket.gaierror: [Errno 11001] getaddrinfo failed

完整的错误信息:

 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

【问题讨论】:

  • 看起来套接字库无法解析 SMTP 服务器名称。
  • 这个 SMTP 服务器是否还有 A 记录

标签: python


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

            你可能在 settings.py 文件中犯了一个小错误.. 在您的设置文件中再次检查您的代码 设置.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
            

            【讨论】:

              【解决方案7】:

              我在尝试使用烧瓶邮件时收到此错误 我只需要重新发送消息,它工作得很好。 我不知道为什么我第一次收到错误可能是库中的错误...

              【讨论】:

                【解决方案8】:

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

                 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"
                

                【讨论】:

                  【解决方案9】:

                  我更喜欢你们以管理员身份运行文件,例如 然后以管理员身份打开cmd 类型 cd C:\into .py 文件路径 然后输入 python 文件名.py

                  它对我有用。 祝你好运

                  【讨论】:

                    【解决方案10】:

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

                    【讨论】:

                      猜你喜欢
                      • 2021-10-05
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-05-27
                      • 2014-05-16
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-02-12
                      • 1970-01-01
                      相关资源
                      最近更新 更多