【问题标题】:Why is smtplib.SMTP().sendmail not sending a DKIM signed message为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件
【发布时间】:2018-08-10 02:33:18
【问题描述】:

我已经在服务器上设置了 postfix 以及 openDKIM。

当我跑步时:

echo "Testing setup" | mail -s "Postfix test" {my_email_address}

我收到了电子邮件,邮件标头中有一个DKIM-Signature 标头。

然而,当我使用 smtplib 编写一个 python 脚本来发送电子邮件时:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import make_msgid

msg = MIMEMultipart('alternative')
part1 = MIMEText('Hello, world', 'plain')
msg.attach(part1)
msg['From'] = 'alert@{my_domain}'
msg['To'] = '{my_email_address}'
msg['Subject'] = 'Test Email'
msg['Message-ID'] = make_msgid()

mailer = smtplib.SMTP('localhost')
mailer.sendmail('alert@{my_domain}', '{my_email_address}', msg.as_string())
mailer.quit()

到达我收件箱的电子邮件缺少DKIM-Signature 标头,而在Authentication-Results 中我看到dkim=none (no signatures found);

所以我的问题是: 我是否需要手动签署我的电子邮件(例如使用 dkimpy),或者我可以启用一些设置来为我签名?

如果您想要/需要任何额外信息,请告诉我。

【问题讨论】:

    标签: python email smtplib postfix dkim


    【解决方案1】:

    很难确定,因为您没有包含任何配置或日志信息。但是 OpenDKIM 信息有这样的说法:

    除非符合签名标准,否则将验证消息, 它们是: (1) From: 地址(如果存在)上的域必须是 由 -d 命令行开关或 Domain 配置文件列出 设置,以及 (2) (a) 连接到 MTA 的客户端必须具有 已通过身份验证,或者 (b) 必须列出连接到 MTA 的客户端 在 InternalHosts 配置文件设置引用的文件中 (或在该选项的默认列表中),或 (c) 客户端必须是 连接到由 MTA 配置文件命名的守护程序端口 设置,或 (d) MTA 必须设置一个或多个与 MacroList 配置文件设置的标准。

    在您的 SMTP 代码中,您显然没有通过 MTA 的身份验证。那么问题就变成了,您的配置是否允许 OpenDKIM 以任何其他方式注意到您的愿望,例如在 InternalHosts 中有 localhost? (我认为这是默认设置,但也许你已经覆盖了它。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2013-05-28
      • 2012-11-15
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多