【发布时间】:2017-12-28 01:43:20
【问题描述】:
我正在尝试使用 SMTP 库创建一个完全自动化的 Raspberry Pi,以向特定地址发送带有附件的电子邮件。但我实际上不知道如何测试电子邮件是否发送成功。如果由于某种原因无法发送,例如没有 Internet 连接,则应在几分钟后重试。
我使用带有 Raspian GNU/Linux 8 的 Raspberry Model 3
我发现有些东西说这会起作用:
[..]
try:
smtpserver.sendmail(sender, [receiver], msg.as_string())
smtpserver.quit()
except smtplib.SMTPConnectionError:
print(_logger.exception('SMTP Connection failed to %s on %s' % (host, port)))
我知道这行不通,因为它只是一个打印命令,但为了安全起见,我尝试了它。 我得到了这个错误代码:
Traceback (most recent call last):
File "**Path + Filename**", line 43, in <module>
smtpserver = smtplib.SMTP('***', ***)
File "/usr/lib/python2.7/smtplib.py", line 256, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python2.7/smtplib.py", line 316, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python2.7/smtplib.py", line 291, in _get_socket
return socket.create_connection((host, port), timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known
如何测试是否已建立连接并且邮件是否已发送?
ps:我的英语不是很完美,但我希望它可以理解
【问题讨论】:
-
一个常见的解决方案是将排队和重试逻辑卸载到真正的邮件服务器,称为智能主机。您的代码仍然需要可靠地发送到智能主机,而不会崩溃等。安装像 Postfix 这样的真正 MTA,可能在云服务上。它知道如何管理未发送消息队列、如何管理和安排重试尝试、何时放弃以及将目的地视为无法投递等等。
-
当然,这对您的直接问题没有帮助。如果网线被拔掉,发送邮件会以某种方式失败。