Вопрос

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

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

РЕДАКТИРОВАТЬ : это будет работать со всеми почтовыми клиентами (как отправляющими, так и получающими)

Это было полезно?

Решение 3

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

Другие советы

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

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

<Ол>
  • Проверьте следующие условия для тела:

    <Ол>
  • Если первой частью является HTML, установите его в тексте сообщения

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

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

  • Цикл по остальным частям. Добавьте все остальное как вложение, кроме

    <Ол>
  • изображения с установленным заголовком идентификатора содержимого или

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

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

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

    Сопоставьте любую текстовую часть (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).

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top