我正在尝试使用Beaglebone Black(BBB)发送电子邮件通知,但我已经抓住了这个getaddrinfo错误,内容如下:
socket.gaierror:[Errno -2]名称或服务未知
我一直在研究这个问题,但却找不到为什么这样做不起作用。
我试图运行的纳米文件:
import smtplib
#import time
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
#time.sleep(1000)
print("SMTP object created...")
smtpObj.ehlo()
#time.sleep(1000)
print("EHLO...")
smtpObj.starttls()
#time.sleep(1000)
print("Starting TLS...")
smtpObj.login('EXAMPLEACCOUNT@gmail.com', 'EXAMPLEPASSWORD')
#time.sleep(1000)
print("Logged into EXAMPLEACCOUNT@gmail.com...")
smtpObj.sendmail('EXAMPLEACCOUNT@gmail.com', 'EXAMPLERECIPIENT', '''Subject:test subject \ntest body
Auto Alert System.''')
{}
#time.sleep(1000)
print("Sending email...")
smtpObj.quit()
#time.sleep(1000)
print("Destorying object.")
调用test_email2.py函数的输出如下:
root@beaglebone:~/Desktop/email_project# python test_email2.py
Traceback (most recent call last):
File "test_email2.py", line 4, in <module>
smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
File "/usr/lib/python2.7/smtplib.py", line 249, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 309, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 284, in _get_socket
return socket.create_connection((port, host), timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -2] Name or service not known
提供的格式
答案 0 :(得分:1)
socket.gaierror
表示(libc中的基础)getaddrinfo
函数无法获取您提供的域名的IP地址。它解释了失败的原因:[Errno -2] Name or service not known
,因此它不知道具有此类名称的域smtp.gmail.com
。这个域名显然存在,因此您应该查看BBB系统中的DNS系统设置(实际上它更像是一个超级用户社区问题)。
配置中使用了哪些DNS服务器?如果您在环回时使用本地缓存DNS服务器,它是否正常运行?是否正确配置以允许递归请求?这个特殊问题很可能与Python或您的代码无关;这是你的BBB系统无法解析至少一些(如果不是全部)域名。