发送mhtml电子邮件 - C#

时间:2010-01-20 11:24:04

标签: c# .net email mhtml

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

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

任何人都可以建议我发送mhtml电子邮件的其他组件 仅供参考,我使用的是.Net 3.5

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

谢谢!

4 个答案:

答案 0 :(得分:11)

我使用普通的旧本地MailMessage课程。这个previous answer可以指向正确的方向

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

答案 1 :(得分: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);
}
}

答案 2 :(得分: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.


来你的问题如何添加图像。
您需要为MailMessage设置isHtml=true
由于您要发送邮件,html中的相对路径不会像../directory/imagename.formate一样工作 在这种情况下,您需要提供到websiteUrl/directory/imagename.formate的图像位置的完整路径
要动态获取完整的Url,您可以像Request.Uri.GetLeftParth(URIPartial.Authority)+VitrtualToAbsolute.getAbsolute("~")

一样使用

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

答案 3 :(得分:0)

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

MailMessage.AlternateViews Property