Pergunta

Escrevi um programa em C# que envia e -mails. Agora, tenho um requisito para assinar e -mails de saída usando o DominKeys/DKIM, mas não tenho certeza de como fazê -lo.

Eu configurei todas as teclas, mas não sei como conseguir e HWO para incluí -las no cabeçalho do e -mail.

Foi útil?

Solução 6

Não encontrei muita ajuda nessa questão, mas meu problema foi resolvido configurando o servidor SMTP. Não posso postar essas etapas, pois estou usando o servidor SMTP de terceiros e cada servidor tem sua própria configuração. Após a configuração adequada, meu SMTP adiciona automaticamente a assinatura DM/DKIM.

Outras dicas

Há um problema fundamental em tentar fazer assinaturas dkim com system.net.mail.mailmessage e system.net.mail.smtpclient, o que é que, para assinar a mensagem, você precisa cutucar os internos do smtpclient para que o hash fosse Corpo de mensagem como uma das etapas na geração do cabeçalho da assinatura DKIM. O problema ocorre quando você tem visões ou anexos alternativos, porque o SMTPClient gera novos limites multipartidários cada vez que grava a mensagem que quebra o hash do corpo e, portanto, a validade da assinatura DKIM.

Para contornar isso, você pode usar o Mimekit e Mailkit Bibliotecas de código aberto para .NET como uma estrutura alternativa para usar o System.net.mail.

Para adicionar uma assinatura DKIM a uma mensagem no Mimekit, você faria algo assim:

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 a mensagem usando o MailKit, você faria algo assim:

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 ajude.

Vejo https://github.com/dmcgiv/dkim.net É uma implementação de DomainKeys Identificou Mail (DKIM) para .NET escrito em C# - Ele permite assinar objetos de MailMessage.

Eu quero saber também, apenas encontro um implemento DKIM, mas não posso correr com sucesso --_-http://tinisles.blogspot.com/2009/09/sending-dkim-email-from-c.html

Usarhttp://www.mimekit.org

Não apenas permite usar o DKIM para assinar, mas também você pode incluir certificados S/MIME, certificados PGP e muito mais. Além disso, é um LIB muito maduro - o único que encontrei que lida com idiomas estrangeiros (além do inglês) corretamente, pois é completamente e completamente codificado com o Unicode em mente.

É livre e OpenSource.

Se você está procurando DKIM-SIGN O Corpo da Magia de Correio, o DKIM.NET é ótimo. Se você deseja ter visões alternativas em sua mensagem, não consegui encontrar uma solução e escrevi minha própria (código aberto com os isenções de responsabilidade usuais) que podem ser encontradas em https://github.com/yanniscarras/dkim-alternativeViews

Entendo que este é um tópico bastante antigo, mas pensei que poderia ajudar alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top