我曾尝试使用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
答案 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 服务。