Конвертировать MIME-дерево в MailMessage - PullRequest
3 голосов
/ 16 июня 2009

Я пишу программу на C #, которая обрабатывает и пересылает сообщения электронной почты. У меня есть библиотека POP3 и анализатор MIME, и мне нужно скопировать дерево MIME в System.Net.Mail.MailMessage.

Как лучше всего сопоставить различные части MIME с AlternateView с, LinkedResource с и Attachment с?

EDIT : Это будет работать со всеми почтовыми клиентами (как отправляющими, так и получающими)

Ответы [ 5 ]

2 голосов
/ 16 июня 2009

Из обзора в 10 000 футов вот что я бы сделал.

Сведите части пантомимы в дерево. Убедитесь, что каждая часть содержит 1 и только 1 часть (не родительский элемент, как multipart / related или что-то в этом роде).

  1. Проверьте следующие условия для тела:

    1. Если первой частью является HTML, задайте для нее текст сообщения

    2. Если 1-я часть представляет собой простой текст, а 2-я часть - , а не html, установите текстовую часть в тело сообщения.

    3. Если первая часть обычная, а вторая - HTML, создайте 2 альтернативных представления. *** Это предполагает, что ни одна из этих частей не имеет Content-Disposition: заголовок вложения.

  2. Перебрать оставшиеся части. Добавьте все остальное как вложение, кроме

    1. изображений с установленным заголовком content-id или

    2. изображения с установленным заголовком содержимого.

      Если существует один из этих заголовков, я бы добавил эти изображения в качестве LinkedResource (только если на самом деле есть часть тела HTML).

Это должно помочь вам начать работу и охватить около 99% обычной электронной почты.

1 голос
/ 28 января 2011

Сопоставить любую текстовую часть (text / plain, text / html и т. Д.), Которая содержится в составной / альтернативной части, с AlternateView. Также сопоставьте первую найденную текстовую часть с AlternateView, независимо от его родительского типа, для учета случая сообщения, состоящего только из одной текстовой части.

Сопоставить оставшиеся части с вложением или LinkedResource в зависимости от заголовка Content-Disposition.

Сопоставьте эти части с приложением Content-Disposition к приложению.

Сопоставьте эти части со встроенным Content-Disposition или без заголовка Content-Disposition к LinkedResource. Этот последний шаг можно выполнить, проверив, что Content-ID совпадает с Content-ID, на который ссылается конкретная текстовая часть, но для практических целей можно предположить, что все созданные таким образом LinkedResources принадлежат первому text / html AlternateView (или последний созданный AlternateView, если нет AlternateView типа text / html).

0 голосов
/ 17 июня 2009

Хмммм, вам обязательно нужно использовать System.Net.Mail.MailMessage?

System.Net.Mail.MailMessage предлагает лишь очень небольшое подмножество того, что предлагает MIME. Таким образом, если ваш анализатор MIME стремится поддерживать все / большинство стандартных функций, то ваша цель скопировать сообщение MIME в MailMessage будет в лучшем случае трудной, а в худшем - невозможной. Разве библиотека, обеспечивающая доступ по протоколу POP3, также не обеспечивает доступ по SMTP? Если это так, я бы оставил System.Net.Mail.MailMessage в покое и пошел бы с тем, что предоставляет библиотека сторонней организации.

0 голосов
/ 16 июня 2009

Возможно, это не самый лучший способ, но я бы попробовал получить «сырой» адрес электронной почты и просто заменить на новый адрес электронной почты.

0 голосов
/ 16 июня 2009

Прямо сейчас я копирую что-либо с Content-Disposition, который не inline, или с категорией MIME, отличной от Text или Image, в Attachment, что-нибудь inline или что-нибудь с категорией MIME от Image до LinkedResource в представлении HTML или в последнем представлении и всем остальным как AlternateView. (Я еще не проверял это)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...