Отправка сообщений mhtml - С#
У меня есть требование отправить электронные письма, содержащие как текст, так и изображения.
Итак, у меня есть файл .mhtml, содержащий содержимое, которое нужно отправить по электронной почте.
Я использовал Chilkat для этого, но в Outlook 2007 он отображает файл mhtml как разные вложения (html + images).
Может ли кто-нибудь предложить мне другой компонент для отправки сообщений mhtml.
FYI, я использую .Net 3.5
Кроме того, я не хочу сохранять изображения на сервере перед их отправкой.
Спасибо!
Ответы
Ответ 1
Я использую простой старый класс MailMessage
. Этот предыдущий ответ может указывать вам в правильном направлении
EDIT: Я создал аналогичный код некоторое время назад, который захватывает внешнюю HTML-страницу, анализирует ее содержимое, захватывает весь внешний контент (css, изображения и т.д.) и отправляет его по электронной почте, не сохраняя ничего на диске.
Ответ 2
Вот пример использования изображения в качестве встроенного ресурса.
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);
}
}
Ответ 3
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("~")
Я не уверен в последней строке, так как я написал прямо здесь. Вам просто нужно использовать его и иметь удачу; -)
Ответ 4
Вам нужно явно установить тип MIME на multipart/related
. Измените MailMessage.Body
, чтобы включить в него содержимое файла MHTML. Наконец, добавьте новый элемент в коллекцию MailMessage.AlternateViews
, чтобы определить правильный тип MIME. Следующая ссылка из MSDN имеет очень хороший пример, как ее настроить:
Свойство MailMessage.AlternateViews