5

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

9 回答 9

11

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

于 2015-09-21T15:34:23.837 回答
5

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

于 2013-08-23T10:58:43.540 回答
0

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

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

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

于 2020-09-12T13:03:23.770 回答
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
于 2020-09-30T13:29:17.547 回答
0

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

于 2018-11-12T16:24:14.730 回答
0

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

于 2020-05-05T14:10:51.660 回答
-1

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

它对我有用。祝你好运

于 2020-04-19T17:02:24.730 回答
-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"
于 2018-08-06T07:23:19.913 回答
-1

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

于 2021-01-29T16:12:33.747 回答