Hay un problema fundamental al tratar de hacer firmas DKIM con System.Net.Mail.MailMessage y System.Net.Mail.SmtpClient, que es que para poder firmar el mensaje, debe introducir las partes internas de SmtpClient en ordene el cuerpo del mensaje como uno de los pasos para generar el encabezado DKIM-Signature. El problema aparece cuando tienes vistas alternativas o archivos adjuntos porque SmtpClient generará nuevos límites de varias partes cada vez que escribe el mensaje que rompe el hash del cuerpo y, por lo tanto, la validez de la firma DKIM.
Para solucionar esto, puede utilizar las bibliotecas de código abierto MimeKit y MailKit para .NET como marco alternativo al uso de System.Net.Mail.
Para añadir una firma DKIM a un mensaje en MimeKit, que haría algo como esto:
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);
Para enviar el mensaje usando MailKit, que haría algo como esto:
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);
}
Espero que ayude.
¿Encontró una solución usando el servidor SMTP de Windows? – Josh
verifique mi respuesta aceptada ... – Nnp