Подтвердить что ты не робот

Отправка сообщений mhtml - С#

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

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

Может ли кто-нибудь предложить мне другой компонент для отправки сообщений mhtml.
FYI, я использую .Net 3.5

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

Спасибо!

4b9b3361

Ответ 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