Как подписывать доменные имена /DKIM с помощью SMTP-клиента С#?
Я написал программу на С#, которая отправляет электронные письма. Теперь у меня есть требование подписывать исходящие письма с помощью Dominkeys/DKIM, но я не уверен, как это сделать.
Я установил все ключи, но я не знаю, как их получить, и hwo включить их в заголовок электронной почты.
Ответы
Ответ 1
Я не нашел много помощи по этой проблеме, но моя проблема решена путем настройки SMTP-сервера.
Я не могу опубликовать эти шаги, поскольку я использую сторонний SMTP-сервер, и каждый сервер имеет собственную конфигурацию. после правильной настройки мой smtp автоматически добавляет подпись DM/DKIM.
Ответ 2
Существует фундаментальная проблема с попыткой создания подписей DKIM с помощью System.Net.Mail.MailMessage и System.Net.Mail.SmtpClient, заключающаяся в том, что для подписи сообщения вам необходимо протолкнуть внутреннюю часть SmtpClient, чтобы хэшировать тело сообщения в качестве одного из этапов создания заголовка DKIM-подписи. Проблема возникает, когда у вас есть альтернативные представления или вложения, потому что SmtpClient будет генерировать новые многокомпонентные границы каждый раз, когда записывает сообщение, которое нарушает хэш тела и, следовательно, валидность DKIM-подписи.
Чтобы обойти это, вы можете использовать библиотеки с открытым исходным кодом MimeKit и MailKit для .NET в качестве альтернативной среды для использования System.Net.Mail.
Чтобы добавить подпись DKIM к сообщению в MimeKit, вы должны сделать что-то вроде этого:
MimeMessage message = MimeMessage.CreateFromMailMessage(mailMessage);
HeaderId[] headersToSign = new HeaderId[] { HeaderId.From, HeaderId.Subject, HeaderId.Date };
string domain = "example.net";
string selector = "brisbane";
DkimSigner signer = new DkimSigner ("C:\my-dkim-key.pem", domain, selector)
{
SignatureAlgorithm = DkimSignatureAlgorithm.RsaSha1,
AgentOrUserIdentifier = "@eng.example.com",
QueryMethod = "dns/txt",
};
// Prepare the message body to be sent over a 7bit transport (such as
// older versions of SMTP). This is VERY important because the message
// cannot be modified once we DKIM-sign our message!
//
// Note: If the SMTP server you will be sending the message over
// supports the 8BITMIME extension, then you can use
// 'EncodingConstraint.EightBit' instead.
message.Prepare (EncodingConstraint.SevenBit);
message.Sign (signer, headersToSign,
DkimCanonicalizationAlgorithm.Relaxed,
DkimCanonicalizationAlgorithm.Simple);
Чтобы отправить сообщение с помощью MailKit, вы должны сделать что-то вроде этого:
using (var client = new MailKit.Net.Smtp.SmtpClient ()) {
client.Connect ("smtp.gmail.com", 465, true);
client.Authenticate ("username", "password");
client.Send (message);
client.Disconnect (true);
}
Надеюсь, это поможет.
Ответ 3
см. https://github.com/dmcgiv/DKIM.Net это реализация DomainKeys Identified Mail (DKIM) для .Net, написанная на С#, - позволяет вам подписывать объекты MailMessage.
Ответ 4
Я хочу знать также
я просто нахожу dkim-реализацию, но я не могу запустить sucessful -_-
http://tinisles.blogspot.com/2009/09/sending-dkim-email-from-c.html
Ответ 5
Использование
http://www.mimekit.org
Не только позволяет использовать DKIM для подписания, но также вы можете включать сертификаты S/MIME, сертификаты PGP и многое другое.
Кроме того, его очень зрелая библиотека - единственная, что я нашел, которая правильно обрабатывает иностранные языки (кроме английского), так как она полностью и полностью кодируется с помощью unicode.
Его свободный и openource.
Ответ 6
Если вы ищете DKIM-знак тела MailMessage, тогда DKIM.NET отлично. Если вы ищете альтернативные взгляды в своем сообщении, я не смог найти решение и написал свой собственный (с открытым исходным кодом с обычными оговорками), который можно найти в https://github.com/yannispsarras/DKIM-AlternativeViews
Я понимаю, что это довольно старый поток, но я подумал, что это может помочь кому-то.
Ответ 7
Это решило эту проблему для меня при использовании Mailenable в качестве сервера ретрансляции SMTP.
http://www.mailenable.com/kb/content/article.asp?ID=ME020700
При создании записи DKIM TXT для доменного имени не забудьте использовать активный селектор в качестве префикса => yourselector._domainkey.yourdomainname.be