Pergunta

Estou escrevendo um programa AA C# que processa e encaminha mensagens de email. Eu tenho uma biblioteca POP3 e um analisador de mímica, e preciso copiar a árvore MIME em um System.Net.Mail.MailMessage.

Qual é a melhor maneira de mapear diferentes partes de mímica para AlternateViews, LinkedResourceareia Attachments?

EDITAR: Isso funcionará com todos os clientes de email (envio e recebimento)

Foi útil?

Solução 3

No momento, estou copiando qualquer coisa com um Content-Disposition o que não é inline, ou com uma categoria MIME de qualquer coisa que não seja texto ou imagem, para um Attachment, nada inline, ou qualquer coisa com uma categoria MIME Image para um LinkedResource na visualização html ou na última visão, e qualquer outra coisa como um AlternateView. (Ainda não testei isso)

Outras dicas

De uma visão geral de 10.000 pés, eis o que eu faria.

Achate suas partes mímicas em uma árvore. Verifique se cada peça contém 1 e apenas 1 parte (não um pai como um multipart/relacionado ou algo assim).

  1. Verifique as seguintes condições para o corpo:

    1. Se a 1ª parte for html, defina -a para o corpo da mensagem

    2. Se a 1ª parte for um texto simples e a segunda parte é não HTML, defina a peça de texto simples no corpo da mensagem.

    3. Se a primeira parte for clara e a segunda parte for HTML, crie 2 vistas alternativas. *** Isso pressupõe que nenhuma dessas partes tenha uma disposição de conteúdo: cabeçalho de anexo.

  2. Percorrer o restante das partes. Adicione todo o resto como anexo, exceto

    1. imagens que têm um cabeçalho de ID de conteúdo definido, ou

    2. imagens que possuem um cabeçalho de localização de conteúdo.

      Se existirem um desses cabeçalhos, eu adicionaria essas imagens como um LinkedResource (apenas se houver uma parte do corpo HTML).

Isso deve começar e cobrir cerca de 99% do e -mail normal por aí.

Mapeie qualquer peça de texto (texto/plano, texto/html etc.) que está contido em uma peça multipartida/alternativa a uma View Alternate. Mapeie também a primeira parte do texto encontrada em uma View Alternate, independentemente do seu tipo pai, para atender ao caso da mensagem que consiste apenas em uma única peça de texto.

Mapeie as peças restantes para um anexo ou um LinkedResource, dependendo do cabeçalho da disposição de conteúdo.

Mapeie essas partes com uma disposição de conexão de conteúdo, para um anexo.

Mapeie essas partes com uma disposição de conteúdo de cabeçalho em linha ou sem disposição de conteúdo, para um LinkedResource. Esta última etapa pode ser fingida ao verificar se o ID de conteúdo correspondia a um ID de conteúdo referido de uma peça de texto específica, mas para fins práticos, pode-se supor que todos os recursos vinculados criados dessa maneira pertencem ao primeiro texto/HTML alternateView (ou o último AlternateView criado, se não houver view alternativo do tipo de texto/html).

Pode não ser a melhor maneira, mas eu tentaria obter o e-mail 'Raw' e apenas substituir para o novo e-mail

Hmmmm, você absolutamente precisa usar o System.net.mail.mailmessage?

System.Net.Mail.MailMessage oferece apenas um subconjunto muito pequeno do que o MIME oferece. Portanto, se o seu analisador MIME pretende suportar todos os recursos mais padrão, seu objetivo de copiar uma mensagem MIME no MailMessage será difícil, na melhor das hipóteses, na pior das hipóteses. A biblioteca que fornece acesso POP3 também fornece acesso SMTP? Nesse caso, eu deixaria o System.net.mail.mailmessage sozinho e iria com o que a Biblioteca do Partido Thrid fornecer.

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