16

我需要发送包含文本和图像的电子邮件。
所以,我有 .mhtml 文件,其中包含需要通过电子邮件发送的内容。

我为此使用了 Chilkat,但在 Outlook 2007 中,它将 mhtml 文件显示为不同的附件(html+图像)。

任何人都可以向我推荐一些其他用于发送 mhtml 电子邮件的组件。
仅供参考,我正在使用 .Net 3.5

另外,我不想在发送之前将图像保存在服务器上。

谢谢!

4

4 回答 4

11

我使用普通的旧原生MailMessage类。这个先前的答案可以为您指明正确的方向

编辑:我前段时间构建了一个类似的代码,它捕获一个外部 HTML 页面,解析它的内容,获取所有外部内容(css、图像等)并通过电子邮件发送,而不在磁盘上保存任何内容。

于 2010-01-20T11:32:14.847 回答
4

这是一个使用图像作为嵌入资源的示例。

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);
}
}
于 2010-01-20T11:55:29.973 回答
2
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("~")

我不确定最后一行,因为我直接在这里写过。你只需要使用它并祝你好运;-)

于 2012-12-18T10:52:29.683 回答
0

您需要将 MIME 类型显式设置为multipart/related. 更改 以MailMessage.Body在其中包含 MHTML 文件的内容。最后向MailMessage.AlternateViews集合中添加一个新项目以定义正确的 MIME 类型。来自 MSDN 的以下链接有一个很好的示例如何设置它:

MailMessage.AlternateViews 属性

于 2012-12-19T13:38:24.123 回答