Отправка mhtml писем - C # - PullRequest
       35

Отправка mhtml писем - C #

16 голосов
/ 20 января 2010

У меня есть требование отправлять электронные письма, содержащие текст и изображения.
Итак, у меня есть файл .mhtml, содержащий содержимое, которое необходимо отправить по электронной почте.

Я использовал Chilkat для этого, но в outlook 2007 он показывает файл mhtml как различные вложения (html + images).

Может кто-нибудь предложить мне какой-нибудь другой компонент для отправки электронных писем в формате mhtml.
К вашему сведению, я использую .Net 3.5

Кроме того, я не хочу сохранять изображения на сервере перед их отправкой.

Спасибо!

Ответы [ 4 ]

11 голосов
/ 20 января 2010

Я использую простой старый родной MailMessage класс. Этот предыдущий ответ может указать вам правильное направление

РЕДАКТИРОВАТЬ: Некоторое время назад я создал похожий код, который захватывает внешнюю HTML-страницу, анализирует ее содержимое, получает весь внешний контент (CSS, изображения и т. Д.) И отправляет его по электронной почте, без сохранение чего-либо на диске.

4 голосов
/ 20 января 2010

Вот пример использования изображения в качестве встроенного ресурса.

MailMessage message = new MailMessage();
message.From = new MailAddress(fromEmailAddress);
message.To.Add(toEmailAddress);
message.Subject = "Test Email";
message.Body = "body text\nblah\nblah";

string html = "<body><h1>html email</h1><img src=\"cid:Pic1\" /><hr />" + message.Body.Replace(Environment.NewLine, "<br />") + "</body>";
AlternateView alternate = AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html);
message.AlternateViews.Add(alternate);

Assembly assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream("SendEmailWithEmbeddedImage.myimage.gif")) {
    LinkedResource picture = new LinkedResource(stream, MediaTypeNames.Image.Gif);

    picture.ContentId = "pic1"; // a unique ID 
    alternate.LinkedResources.Add(picture);

    SmtpClient s = new SmtpClient();
    s.Host = emailHost;
    s.Port = emailPort;
    s.Credentials = new NetworkCredential(emailUser, emailPassword);
    s.UseDefaultCredentials = false;

    s.Send(message);
}
}
2 голосов
/ 18 декабря 2012
System.Net would be the one that you are looking for.<br/>
MailMessage is used to compose new mail.<br/>
SMTPClient is used to send mail.
NetworkCredentials would be used to attach username and password for making request to sending mail.

Подходя к вашему вопросу, как добавить изображения.Вам нужно установить isHtml=true для MailMessageПоскольку вы хотите отправлять почту относительными путями в HTML, не будет работать как ../directory/imagename.formateв таком случае вам нужно указать полный путь к местоположению изображения, которое websiteUrl/directory/imagename.formateЧтобы получить полный URL-адрес динамически, вы можете использовать вот так Request.Uri.GetLeftParth(URIPartial.Authority)+VitrtualToAbsolute.getAbsolute("~")

Я не уверен насчет последней строки, так как написал прямо здесь.Вам просто нужно использовать его и удачи; -)

0 голосов
/ 19 декабря 2012

Вам необходимо явно установить тип MIME на multipart/related. Измените MailMessage.Body, чтобы включить в него содержимое файла MHTML. Наконец, добавьте новый элемент в коллекцию MailMessage.AlternateViews, чтобы определить правильный тип MIME. Следующая ссылка из MSDN имеет очень хороший пример, как ее настроить:

Свойство MailMessage.AlternateViews

...