为什么smtplib.SMTP()。sendmail没有发送DKIM签名消息

时间:2018-03-01 22:20:42

标签: python email smtplib postfix dkim

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

当我跑步时:

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

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

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

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),或者是否有一些设置我可以让它为我签名?

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

1 个答案:

答案 0 :(得分:1)

由于您还没有包含任何配置或日志信息,因此很难确定。但OpenDKIM信息可以这样说:

  

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

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