我正在使用运行 Linux (Ubuntu 16.04) 的大学服务器。我正在尝试使用此服务器发送电子邮件(使用 python,下面的代码),但显然传出 SMTP 连接被阻止(我这么说是因为代码在我的 mac 上运行,它只挂在服务器上)。有什么办法可以解除他们的封锁吗?
当然,我问了我的系统管理员,但我想与此同时我可能可以做点什么。我已经必须添加导出才能使服务器连接到互联网;特别是我将其添加到.bash_profile
:
export https_proxy='...'
export http_proxy='...'
我可能必须做类似的事情才能使其发挥作用?我在一个网页(来自大学)上看到我需要“启用 SMTP 身份验证 (SMTP AUTH)”才能发送电子邮件。但网上查了一下,并没有什么有用的信息。启用 SMTP AUTH 意味着什么?这是否意味着在连接到电子邮件服务器时使用安全连接进行连接?
这是我用来发送电子邮件的 python 代码:
server = smtplib.SMTP_SSL(smtp_ssl_host, smtp_ssl_port) <--- this is where is hangs
server.login(username, password)
server.sendmail(username, targets, msg.as_string())
server.quit()
请注意,我正在使用我的 yandex 帐户发送这些电子邮件
答案1
正如我在评论中提到的,确实有人提出了几个问题。我在这里稍微谈谈25端口的问题。
25端口为标准端口未加密的SMTP 端口,系统管理员配置组织的防火墙以阻止该端口上的出站流量是很常见的。这样做主要有两个原因:
- 防止恶意软件、流氓软件、垃圾邮件发送者等出于恶意目的发送电子邮件。
- 防止合法用户通过未加密的通道发送电子邮件。
第二种假设管理员允许授权用户通过加密连接(例如使用 SSL/TLS)发送电子邮件。安全出站 SMTP 的标准端口是 587。如果在您的情况下允许这样做,那么就可以解决您的问题。通过端口 587 建立到 SMTP 中继服务器的加密连接。您必须弄清楚如何在代码中执行此操作(或单独/在其他地方询问如何执行)。
不幸的是,#1 经常取代#2,甚至管理员也不允许安全的电子邮件通信。如果是这样,请检查您的电子邮件提供商(维护 SMTP 中继的人)是否接受备用端口上的流量。例如,有些会提供使用端口 10025 的选项。或者,还有可以转发电子邮件的第三方电子邮件提供商。也就是说,他们在端口 10025 上接受电子邮件,然后将其转发到端口 25 上的主要提供商的中继。这是一个示例,我的搜索出现的第一个示例:“备用端口 SMTP”服务。这个是要收费的。您也许可以找到免费提供此服务的人(至少是小批量的)。
或者您的管理员可能允许该策略有特殊例外。例如,如果您在一家公司工作并证明访问对于业务至关重要,他们可能会允许 25/587 上的流量用于有限数量的原始主机和/或特定 SMTP 中继地址。
如果您仍然不成功,那么您的下一个最佳选择可能是 SSH 隧道。您将需要访问防火墙之外运行 SSH 服务器(例如 sshd)的计算机。然后,您可以设置一种特殊类型的连接,该连接侦听一个端口并将出站转发到另一台主机上的另一个端口。我不会详细介绍如何做到这一点,因为网上已经有很多描述。
更新:我应该补充一点,如果您在没有与管理员讨论的情况下使用备用端口或设置 SSH 隧道,并且他们稍后发现,他们可能对此不太友好。如果他们不高兴,你可以和这个选项说再见。另一方面,如果您提前与他们讨论,他们可能会完全禁止。你必须权衡你的选择。只要您所做的事情不会对安全性产生负面影响,合理的管理员就会同意。但它们并不都是合理的。 :)