[英](Python) socket.gaierror: [Errno 11001] getaddrinfo failed
[英]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.