如何解决 OSError: [Errno 101] Network is unreachable 错误?

3

使用smtplib时似乎出现了问题。在家里的笔记本电脑上尝试时一切正常,但在大学的树莓派上尝试时失败了。

问题似乎是由于大学代理阻止了smtplib。

如果是这种情况,如何解决这个问题?如果不是,还有什么其他原因呢?

import smtplib 

gmailaddress = 'probnimejl@exapmple.com'
gmailpassword = 'password'
mailto = 'probnimejl@example.com'
msg = str(input("What is your message? \n "))

mailServer = smtplib.SMTP('smtp.example.com' , 587)
mailServer.starttls()
mailServer.login(gmailaddress , gmailpassword)
mailServer.sendmail(gmailaddress, mailto , msg)
print(" \n Sent!")
mailServer.quit()

当我运行这段代码时,我会得到以下错误。
Traceback (most recent call last):
  File "test2.py", line 9, in <module>
    mailServer = smtplib.SMTP('smtp.example.com' , 587)
  File "/usr/lib/python3.4/smtplib.py", line 242, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python3.4/smtplib.py", line 321, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/lib/python3.4/smtplib.py", line 292, in _get_socket
    self.source_address)
  File "/usr/lib/python3.4/socket.py", line 512, in create_connection
    raise err
  File "/usr/lib/python3.4/socket.py", line 503, in create_connection
    sock.connect(sa)
OSError: [Errno 101] Network is unreachable

3
希望你没有在全网公开发布你的真实电子邮件和密码。如果是这样,你应该尽快更改密码。 - 001
2
什么代理?显然它会阻止这些协议。 - tripleee
1个回答

1

大多数大型机构,比如一个拥有受过培训和了解知识的IT员工的大学,都会制定关于使用信息技术资源的政策。

这些政策通过各种措施来执行,例如防火墙设置以阻止特定主机或特定端口,资源限制(最大磁盘空间分配,最大网络带宽允许在节流之前等等),允许使用的协议以及可以使用的软件版本。

一个简单的测试是使用应用程序,例如telnet,尝试创建您的主机、Raspberry Pi和大学网络之外的主机之间的网络连接。例如telnet smtp.example.com 587,看看是否有效。

您可能遇到大学防火墙设置,它阻止使用端口587。或者您可能遇到大学网络不认识您的Raspberry Pi并拒绝允许其使用网络的问题。

如果不知道失败的具体原因,很难说,但我认为最好的做法是与大学IT人员交谈,了解您正在尝试做什么的大学政策。

在那次交谈之后,您将能够确定您的选择。

一种解决方法是将树莓派放在大学网络之外,并远程访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接