Как создать электронную почту в формате HTML со встроенным изображением и показать ее в почтовом клиенте по умолчанию, используя .net (c #)? - PullRequest
2 голосов
/ 22 декабря 2010

Если вы посмотрите на инструмент Snip в окнах, есть опция для отправки фрагмента в виде встроенного вложения в почтовом клиенте по умолчанию (я думаю, в виде html-письма). Мне нужно именно это.

В настоящее время я использую простой MAPI для прикрепления изображения, но это не позволяет встраивать.

Одним из ключевых требований является то, что он должен быть создан и затем показан в почтовом клиенте по умолчанию. Я не думаю, что я могу использовать System.Net.Mail для этого. Или я могу?

Это приложение WPF, использующее c #.

РЕДАКТИРОВАТЬ: Пожалуйста, внимательно прочитайте вопрос, прежде чем ответить. Я не новичок в этом. Я знаю, как сделать это в неуправляемом коде, не прибегая к взлому. Мне нужен управляемый эквивалент. Я не ищу хаки и с удовольствием трачу значительное время на правильное решение, если это необходимо.

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Я не думаю, что в mailto можно вставлять изображения Пожалуйста, обратитесь к RFC 2368 . В нем говорится, что цель mailto предназначена только для коротких текстовых сообщений, а не для тел MIME

   The special hname "body" indicates that the associated hvalue is the
   body of the message. The "body" hname should contain the content for
   the first text/plain body part of the message. The mailto URL is
   primarily intended for generation of short text messages that are
   actually the content of automatic processing (such as "subscribe"
   messages for mailing lists), not general MIME bodies.
3 голосов
/ 22 декабря 2010

Используйте Process.Start с параметром ShellExecute для этого:

mailto:email@domain.com?subject=your+file&body=see attachment&attachment="C:\path\to\file.txt"

Я не уверен в кавычках вокруг пути.

Редактировать

Просто подумал о другом решении, которое должно работать.

  1. Создание электронного письма в формате HTML с использованием MailMessage
  2. Сохраните его, используя ответ здесь как XXXX.eml
  3. Используйте ShellExecute с Process.Start , открытым файлом EML.

Он должен открыться в почтовом клиенте по умолчанию.

0 голосов
/ 22 декабря 2010

Я думаю, что вы можете использовать классы в пространстве имен System.Net.Mail, чтобы сделать эту работу.Это требует довольно большой работы.Я оставлю это как упражнение читателя.

Согласно RFC2111 , электронное письмо в формате HTML со встроенным изображением просто хранит тело письма в формате HTML и вложение изображения в двух разных MIME-материалах.

 From: foo1@bar.net
 To: foo2@bar.net
 Subject: A simple example
 Mime-Version: 1.0
 Content-Type: multipart/related; boundary="boundary-example-1";
               type=Text/HTML

 --boundary-example 1
 Content-Type: Text/HTML; charset=US-ASCII

 ... text of the HTML document, which might contain a hyperlink
 to the other body part, for example through a statement such as:
 <IMG SRC="cid:foo4*foo1@bar.net" ALT="IETF logo">

 --boundary-example-1
 Content-ID: foo4*foo1@bar.net
 Content-Type: IMAGE/GIF
 Content-Transfer-Encoding: BASE64

 R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
 NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
 etc...

 --boundary-example-1--

Ключевым моментом является то, что в вашем теле электронного письма HTML вместо использования обычного пути URL-адреса вы вводите «cid: xxxxx», где xxxxx - ваш идентификатор контента.Проверьте RFC2111 для более подробной информации о Content ID.Из того, что я вижу в пространстве имен System.Net.Mail, он позволяет вам создавать MailMessage со свойством IsBodyHtml, установленным в true.Затем, следующее, что вам нужно сделать, это добавить Attachment к этому MailMessage.Приложение - это, конечно, ваше встроенное изображение.Затем вам нужно не забыть установить ContentID вложения.Итак, просто чтобы убедиться, что в вашем электронном письме HTML содержится ссылка на правильный ContentID, все должно работать.

Опять же, я сам не проверял это, но я быстро проверил некоторые из моих писем со встроенным изображением вЭто.Я видел письмо с cid: xxxx в качестве источника изображения, и мой клиент Outlook действительно может его открыть.

...