c# email smtp dkim domainkeys

¿Cómo se utiliza la firma de correo electrónico DomainKeys/DKIM con el cliente C#SMTP?



email (6)

He escrito un programa en C # que envía correos electrónicos. Ahora tengo el requisito de firmar correos salientes usando Dominkeys / DKIM, pero no estoy seguro de cómo hacerlo.

He configurado todas las claves, pero no sé cómo conseguirlas para incluirlas en el encabezado del correo electrónico.


No encontré mucha ayuda en este tema, pero mi problema se resolvió configurando el servidor smtp. No puedo publicar esos pasos ya que estoy usando un servidor smtp de terceros y cada servidor tiene su propia configuración. después de la configuración adecuada, mi smtp agrega automáticamente la firma DM / DKIM.




Si está buscando DKIM-firmar el cuerpo de MailMessage entonces DKIM.NET es genial. Si está buscando tener vistas alternativas en su mensaje, entonces no pude encontrar una solución y escribí la mía (de código abierto con los descargos de responsabilidad habituales) que se puede encontrar en https://github.com/yannispsarras/DKIM-AlternativeViews

Entiendo que este es un hilo muy viejo, pero pensé que podría ayudar a alguien.


Use http://www.mimekit.org

No solo permite el uso de DKIM para la firma, también puede incluir certificados S / MIME, certificados PGP y más. Además, es una lib 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 gratuito y de código abierto.


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 introducir las partes internas de SmtpClient para 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 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ías 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ías 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.