【问题标题】:Sending emails with sendmail doesn't work for large emails使用 sendmail 发送电子邮件不适用于大型电子邮件
【发布时间】:2011-03-03 04:06:41
【问题描述】:

我正在通过以下方式使用python的sendmail

msg = <SOME MESSAGE>
s = smtplib.SMTP('localhost')
s.sendmail(me, you, msg.as_string())
s.quit()

这通常可以正常工作(即我收到电子邮件),但当消息很大(大约 200 行)时它会失败(即没有显示异常但电子邮件没有到达)。有什么想法会导致这种情况吗?

【问题讨论】:

  • “失败”是什么意思? “它不起作用”不是问题描述——你究竟观察到了什么?

标签: python email smtp sendmail


【解决方案1】:

你要寄给谁?如果电子邮件被归类为潜在垃圾邮件,您应该考虑某些电子邮件服务器(例如 Yahoo 和 Hotmail)将传入的电子邮件隔离一段时间。垃圾内容将取决于内容、图像与文本的比例、附件的性质、html 链接的性质、发送速率、重复的数量、发件人以及许多其他因素。

【讨论】:

  • 你是对的。该电子邮件已被我们的邮件服务隔离
【解决方案2】:

尝试设置debuglevel 以跟踪协议进度。

SMTP.set_debuglevel(level)

设置调试输出级别。 level 的 true 值会生成连接调试消息以及发送到服务器和从服务器接收的所有消息。

当消息成功排队时,调试跟踪的尾部如下所示:

>>> conn = smtplib.SMTP('mail')
>>> conn.set_debuglevel(1)
>>> conn.sendmail('you@example.com','me@example.com','subject: test\n\ntest.\n')
...
send: 'subject: test\r\n\r\ntest.\r\n.\r\n'
reply: '250 2.5.0 Message received and queued.\r\n'
reply: retcode (250); Msg: 2.5.0 Message received and queued.
data: (250, '2.5.0 Message received and queued.')
{}

【讨论】:

  • 我这样做了,调试消息与您发布的非常相似:它说reply: retcode (250); Msg: 2.0.0 o5HBqnuj018702 Message accepted for delivery。现在怎么办?你认为它被隔离了吗?
  • 邮件已排队 - 下一步是检查 SMTP 服务器日志内部。 python 脚本运行正常。
【解决方案3】:

您可以尝试查看 SMTP 实际发送的内容,方法是在端口上挂接 netcat,然后在那里发送:nc -l 5678,然后在 Python 中使用 smtplib.SMTP('localhost', 5678)

如果看起来正确(并且应该没有理由不正确),您可以尝试将其提供给 telnet localhost smtp 以直接查看响应。这应该让您知道出了什么问题。

【讨论】:

    【解决方案4】:

    我也刚刚开始尝试通过 SMPT 服务器发送电子邮件。您使用什么软件来创建本地主机服务器?有时,软件可能会设置为拒绝超过给定长度的消息。检查您的服务器设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-20
      • 2018-07-22
      • 2013-11-22
      • 2018-01-20
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多