Python 2.7测试是否发送了SMTP邮件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2.7测试是否发送了SMTP邮件相关的知识,希望对你有一定的参考价值。

我正在尝试使用SMTP库执行完全自动化的Raspberry Pi,以发送带有特定地址附件的电子邮件。但我实际上并不知道如何测试电子邮件是否成功发送。如果由于某种原因无法发送,就像没有互联网连接一样,它应该在几分钟后再试一次。

我使用Raspberry Model 3和Raspian GNU / Linux 8

我发现有些东西说这会起作用:

[..]
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:我的英语不完美,但我希望这是可以理解的

答案

你只有smtplib.SMTPConnectionError,你的帖子追溯是其他例外(所以你的电子邮件不发送):

您可以除了所有其他异常,然后在那里调试:

[..]
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)))
except Exception as e:
    print(e)

以上是关于Python 2.7测试是否发送了SMTP邮件的主要内容,如果未能解决你的问题,请参考以下文章

Python发送邮件smtplib.SMTP各报错问题的解决方法

Python自动化——通过邮件发送测试报告

Python发送邮件

使用Python的smtp发送邮件失败

Python SMTP 发送带附件电子邮件

使用 .net 测试 SMTP