【问题标题】:Sending mail via smtplib loses time通过 smtplib 发送邮件会浪费时间
【发布时间】:2016-08-18 09:00:31
【问题描述】:

我想使用 smtplib 使用 cron 作业每天发送一次状态邮件。

发送邮件效果很好,但是发送时间和日期似乎总是我阅读邮件时的时间和日期,而不是发送邮件时的时间和日期。这可能是 6 小时后。

我没有找到关于向 smtplib 提供发送时间以及消息数据的提示。我是否遗漏了什么或者这是我的邮件服务器配置的问题?但是,通过 Thunderbird 提交的其他邮件在此帐户中没有显示此效果。

下面列出了我的 python 程序(已删除登录数据):

import smtplib

sender = 'abc@def.com'
receivers = ['z@def.com']

message = """From: Sender <abc@def.com>
To: Receiver<z@def.com>
Subject: Testmail

Hello World.
""" 

try:
    smtpObj = smtplib.SMTP('mailprovider.mailprovider.com')
    smtpObj.sendmail(sender, receivers, message)         
    print "Successfully sent email"
except SMTPException:
    print "Error: unable to send email"

[编辑]

按照建议使用电子邮件包的代码,但我收件箱中显示的时间仍然是阅读时间而不是发送时间。

import smtplib
from email.mime.text import MIMEText

sender = ..
receiver = ..

message = "Hello World" 
msg = MIMEText(message)
msg['Subject'] = 'Testmessage'
msg['From'] = sender
msg['To'] = receiver

try:
    s = smtplib.SMTP(..)
    s.sendmail(sender, receiver, msg.as_string())
    s.quit()      
    print "Successfully sent email"
except SMTPException:
    print "Error: unable to send email"  

【问题讨论】:

  • 绝对奇怪...Date 字段通常由 smtp 服务器 (mailprovider.mailprovider.com) 在收到不包含的消息时添加,这应该发生在这里。请显示收到的邮件的完整标头,以便我们了解 SMTP 协议级别发生的情况。
  • @Serge Ballesta:感谢您的提示,与从该服务器收到的其他消息不同,我的传入消息没有附加日期字段。

标签: python smtplib


【解决方案1】:

您可能需要在邮件标题中指定更多信息。尝试使用email module 来构建您的消息,而不是自己组装文本。

【讨论】:

  • 感谢您的建议。我已经使用了电子邮件,cf 上面修改了代码,但没有效果。我没有在电子邮件中找到可以设置的时间属性。
【解决方案2】:

也许这很愚蠢,但是您在服务器上的日期和时间是否正确?

【讨论】:

  • 是的,我知道,但我的声望不够;(
  • 是的,时间设置正确,我尝试从多台计算机发送。
【解决方案3】:

在消息中添加一个明确的日期字段就可以了,感谢 Serge Ballesta 的想法:

import smtplib
from email.utils import formatdate
from email.mime.text import MIMEText

sender = ..
receiver = ..

message = "Hello World" 
msg = MIMEText(message)

msg['Subject'] = 'Testmessage'
msg['From'] = sender
msg['To'] = receiver
msg["Date"] = formatdate(localtime=True)

try:
    s = smtplib.SMTP(..)
    s.sendmail(sender, receiver, msg.as_string())
    s.quit()      
    print "Successfully sent email"
except SMTPException:
    print "Error: unable to send email"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2021-12-01
    • 2012-07-11
    • 2020-01-10
    • 2010-10-07
    • 2021-04-26
    • 2016-01-13
    相关资源
    最近更新 更多