【问题标题】:Python 2.7 Test if SMPT Mail was sentPython 2.7 测试是否发送了 SMTP 邮件
【发布时间】: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,可能在云服务上。它知道如何管理未发送消息队列、如何管理和安排重试尝试、何时放弃以及将目的地视为无法投递等等。
  • 当然,这对您的直接问题没有帮助。如果网线被拔掉,发送邮件会以某种方式失败。

标签: python email smtp smtplib


【解决方案1】:

你只有smtplib.SMTPConnectionError,你的post traceback是其他异常(所以你的邮件没有发送):

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

[..]
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)

【讨论】:

  • 我不知道该怎么办。我使用了您编写的代码,但它返回的错误与以前相同。
  • 你有没有调试过程序崩溃的哪一行?可能没有。
  • 我必须将“try:”设置为代码的开头。现在它只是说“[Errno -2] 名称或服务未知”。但这对我没有帮助。我不得不说我是一个高级初学者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2010-09-09
  • 2011-03-07
  • 2021-03-28
相关资源
最近更新 更多