c# - 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 文档并不太清楚确切的方法。
摘要问题
AgentOrUserIdentifier
如果我的系统使用地址发送,究竟会发生什么application@example.org
?- 我将如何将生成的公钥发布到 Office 365?
任何有启发性的总结将不胜感激,谢谢。
解决方案
我会接受@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/ZpSdnQK2Omx6ZNyHsuvC3MMJYNLQ069ajuJo5FP......."
将私钥复制到文件中,或直接在代码中使用。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一样棒的东西,不要忘记捐赠。
推荐阅读
- bash - 使用 bashscript 循环文件不起作用
- javascript - 如何访问显示为未定义并直接引用它们但在控制台日志记录时正确显示的对象键?
- javascript - 本地复制运行但复制到网络服务器会导致 TypeError 不是函数的错误
- javascript - 是否可以重新定义基础对象 valueOf 以返回内部道具的值?
- python - 如何在两个地方之间创建距离矩阵
- python-2.7 - 为什么我收到“文件名、目录名或卷标语法不正确”。错误?
- excel - 格式化这个方程,我尝试了一些不起作用的东西
- java - 开始使用 libGDX - 项目生成器无法构建
- python - 为什么 set 运算符适用于 dict_key 视图对象而不适用于等效的 set 方法?
- neo4j - 使用 WHERE 查找平均关系数