Saltar al contenido

¿Cómo se firma el correo electrónico Domainkeys/DKIM usando el cliente C# SMTP?

Si te encuentras con algo que te causa duda nos puedes dejar un comentario y trataremos de ayudarte rápidamente.

Solución:

Hay un problema fundamental al tratar de hacer firmas DKIM con System.Net.Mail.MailMessage y System.Net.Mail.SmtpClient, que es que para firmar el mensaje, debe tocar las partes internas de SmtpClient para codificar el hash. cuerpo del mensaje como uno de los pasos para generar el encabezado DKIM-Signature. El problema surge cuando tiene vistas o archivos adjuntos alternativos 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 evitar esto, puede usar las bibliotecas de código abierto MimeKit y MailKit para .NET como un marco alternativo al uso de System.Net.Mail.

Para agregar una firma DKIM a un mensaje en MimeKit, 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, 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.

consulte https://github.com/dmcgiv/DKIM.Net es una implementación de DomainKeys Identified Mail (DKIM) para .Net escrita en C#; le permite firmar objetos MailMessage.

Utilice http://www.mimekit.org

No solo permite usar DKIM para firmar, también puede incluir certificados S/MIME, certificados PGP y más. Además, es una biblioteca muy madura: la única que he encontrado que maneja idiomas extranjeros (aparte del inglés) correctamente, ya que está completamente codificada con Unicode en mente.

Es gratis y de código abierto.

Valoraciones y comentarios

Si estás contento con lo expuesto, puedes dejar una crónica acerca de qué le añadirías a este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *