python - 在 python 中使用 SMTP_SSL 发送邮件
问题描述
我正在使用以下代码发送带有证书的邮件。我有一个ca-chain.cert.pem
来自邮件服务器的文件。如何使用此文件签署邮件(我必须使用此 pem 文件)?
m_server = {
'username': "abc@myserver.io",
'password': "123435",
'server': "mail.myserver.io",
'port': 465,
}
message = MIMEMultipart("alternative")
message["Subject"] = "Notification"
message["From"] = "abc@myserver.io"
message["To"] = "abc@gmail.com"
email_body = "<p>test</p>"
message.attach(MIMEText(email_body, "html"))
with smtplib.SMTP_SSL(m_server['server'], m_server['port']) as server:
server.set_debuglevel(1)
server.login(m_server['username'], m_server['password'])
server.sendmail(m_server['username'], message["To"], message.as_string())
ca-chain.cert.pem 文件:该文件与邮件服务器相关
-----BEGIN CERTIFICATE-----
MIIFhTCCA22....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFnDCCA4Sg....
-----END CERTIFICATE-----
解决方案
如何使用此文件签署邮件(我必须使用此 pem 文件)?
邮件不会在 SMTP 中登录。基于证书的邮件签名由发件人使用 PGP 或 S/MIME 完成。然后是邮件服务器使用 DKIM 完成的基于密钥的签名。但是所有的各种签名方式都需要一个私钥,这里没有给出。
我的猜测是,给定的证书应该用于在 TLS 握手期间对 SMTP 服务器进行身份验证。要指定证书,需要自定义 SSL 上下文,如下所示:
import ssl
ctx = ssl.create_default_context(cafile = 'the-certificates-given-to-you.pem')
with smtplib.SMTP_SSL(m_server['server'], m_server['port'], context=ctx) as server:
...
推荐阅读
- php - 从 Laravel 控制器调用外部 API
- android - Android - 获取当前正在通话的电话号码
- javascript - 在 try catch 运行之前异步解析
- excel - 如何在不丢失之前的电子邮件链的情况下回复电子邮件?
- javascript - 将日期时间转换为 dd/mm/yy h:m
- javascript - 当我运行“npm install”时,我遇到了我不明白的 npm 问题
- batch-file - 使用批处理脚本复制超过 x 天的文件和文件夹
- python - 如何创建一个新的蛋白质数据库文件?
- xcode - 适用于 iOS Xcode 的 Facebook SDK?
- android - 从 Firebase 数据库中检索到 10 多个项目的列表,在第 9 个项目之后,第 10 个项目影响第 1 个项目,第 11 个项目影响第 2 个项目,依此类推