首页 > 解决方案 > C# | jstedfast/MimeKit | 带有 DKIM 设置的 Office 365 连接器

问题描述

DKIM 是为 Office365 中的域设置的。.Net 应用程序(当前为 MVC 4)通过 O365 连接器向外部各方发送电子邮件。我们也想使用 DKIM 签署这些协议。

整个过程我不是很清楚。 MimeKit 的文档相当清晰。我想我可以使用任何 pub/priv 密钥生成器(例如 Putty)来生成密钥对?然后我会以 C# 应用程序可以读入的方式存储私钥

var signer = new DkimSigner ("privatekey.pem") {
   SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1,
   AgentOrUserIdentifier = "@eng.example.com",
   QueryMethod = "dns/txt",
};

公钥将作为我的域的 DNS 记录发布。不幸的是,Office 365 文档并不太清楚确切的方法。

摘要问题

任何有启发性的总结将不胜感激,谢谢。

标签: c#asp.net-mvc-4office365dkimmimekit

解决方案


我会接受@jstedfast 的回答(尽管没有真正理解它)。以防万一其他人为此苦苦挣扎,这是完整的演练:

获取公钥/私钥对。你可以直接使用 Puttygen 或 openssl,但它更容易使用(哦,我只是事先知道)……比如https://port25.com/dkim-wizard/

指定您的域名(此处为 example.org)和“选择器” - 这可能是您的应用程序名称(“greatapp”)。此选择器将是 DNS 中公钥的 TXT 记录。创建额外的 DNS (TXT) 记录;保持 Office365 完整。由于他们定期轮换密钥,因此您需要一个可以控制的附加记录。greatapp._domainkey.example.org IN TXT "k=rsa\; p= here goes the stuff between -----BEGIN PUBLIC KEY----- and -----END PUBLIC KEY-----",例如 "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhvIwVBomj+dx2CEBbY/ZpSdnQK​​2Omx6ZNyHsuvC3MMJYNLQ069ajuJo5FP......."

将私钥复制到文件中,或直接在代码中使用。MimeKit 需要一个文件或一个流,所以对于这里的快速和肮脏的例子,我使用了一个字符串:

var mail = new MimeMessage();
mail.From.Add(new MailboxAddress("Justin Case", "justin@example.org"));
mail.To.Add(new MailboxAddress("Candy Barr", "candy@example.org"));
... subject etc
var privateKey = @"-----BEGIN RSA PRIVATE KEY-----......";
var privateKeyStream = new MemoryStream(Encoding.Default.GetBytes(privateKey));
mail.Sign(new DkimSigner(privateKeyStream, "example.org", "greatapp", DkimSignatureAlgorithm.RsaSha256), new HeaderId[] { HeaderId.From, HeaderId.Subject }, DkimCanonicalizationAlgorithm.Simple, DkimCanonicalizationAlgorithm.Simple);

... Connect client and send.

感谢 jstedfast 存在像MailKit/MimeKit一样棒的东西,不要忘记捐赠。


推荐阅读