簡體   English   中英

socket.gaierror:[Errno 11001] getaddrinfo 失敗

[英]socket.gaierror: [Errno 11001] getaddrinfo failed

我嘗試使用 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

我確信當您從代理后面工作時會出現 gaierror。

問題是“smtp 服務器名稱”的 DNS 查找失敗 - 如果這是您的確切代碼,那么您可以看到原因 - 如果不是,並且您擁有 SMTP 服務器的有效限定名稱,那么您可能遇到防火牆問題/互聯網連接等,還必須將端口設置為有效值以匹配您的服務器 SMTP 配置(通常是端口 25,並非絕對總是如此)。

就我而言,是主機問題。 使用調試模式,我發現在 (host, port, 0, SOCK_STREAM) 我得到了host=local ,它應該是host=localhost 在 run.py 中,我定義了localhost並且文件 hosts (c:\\windows\\system32\\drivers\\etc\\hosts) 被定義為local 它們必須相等,否則你會得到 socket.gaieeror。

urllib3 版本 1.25.9 包中似乎存在一個錯誤。 這對我產生了“socket.gaierror: [Errno 11001] getaddrinfo failed”錯誤(在經過身份驗證的代理服務器后面工作)。 降級到 urllib3 版本 1.25.8 解決了這個問題。

以下答案可能與問題無關。 但是,一些用戶可能有不同的場景。

如果只能通過 VPN 訪問服務器,並且我們嘗試在 VPN 斷開連接的情況下訪問它,則會出現此錯誤:“gaierror: [Errno 11001] getaddrinfo failed”。

連接到 VPN 然后執行代碼應該可以正常工作。

你可能在 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

當我嘗試使用瓶郵件時,我遇到了這個錯誤,我只需要重新發出消息,並且效果很好。 我不知道為什么我第一次遇到錯誤,也許這可能是庫中的錯誤...

您需要使用您的憑據登錄。 嘗試:

 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"

我更喜歡你們以管理員身份運行文件,例如以管理員身份打開 cmd 然后輸入cd C:\\into ur .py 文件路徑,然后輸入python filename.py

它對我有用。 祝你好運

您需要為您的主機郵件激活 IMAP/SMTP 服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM