Я приму ответ @ jstedfast (хотя на самом деле не понимаю его).
На случай, если кто-то еще борется с этим, вот полный обзор:
Получить пару открытый / закрытый ключ. Вы можете использовать Puttygen или openssl напрямую, но проще в использовании (о, если бы я знал только заранее) что-то вроде https://port25.com/dkim-wizard/
Укажите ваше доменное имя (example.org здесь) и «селектор» - это может быть имя вашего приложения («greatapp»). Этот селектор будет записью TXT для открытого ключа в DNS.
Создать дополнительную запись 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 , не забудьте пожертвовать.