当前位置:  开发笔记 > 编程语言 > 正文

在.net中以HTML和纯文本形式发送邮件

如何解决《在.net中以HTML和纯文本形式发送邮件》经验,为你挑选了6个好方法。

我正在使用SmtpClient从我的C#应用​​程序发送邮件.工作得很好,但我必须决定是否要将邮件作为纯文本或HTML发送.我想知道,有没有办法送两个?我认为这叫做多部分.

我用Google搜索了一下,但是大多数示例基本上没有使用SmtpClient,而是整个SMTP-Body本身,这有点"可怕",所以我想知道是否在.net Framework 3.0中构建了一些东西?

如果没有,是否有任何使用良好/强大的第三方库用于发送电子邮件?



1> Michael Stum..:

MSDN文档似乎错过了一件事,我必须手动设置内容类型,否则,它就像一个魅力:-)

MailMessage msg = new MailMessage(username, nu.email, subject, body);
msg.BodyEncoding = Encoding.UTF8;
msg.SubjectEncoding = Encoding.UTF8;

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent);
htmlView.ContentType = new System.Net.Mime.ContentType("text/html");
msg.AlternateViews.Add(htmlView);


看起来MSDN文档已更新:其示例代码的C#版本使用AlternateView.CreateAlternateViewFromString版本,该版本将内容类型作为参数.C++版本没有(他们可能忽略了更新它).
@jep我能够阻止我的smtp服务器(类似于Exchange)通过使用msg.BodyEncoding = Encoding.ASCII将纯文本版本重新编码为BASE64.htmlView没有受到伤害.

2> Nick Berardi..:

您要做的是使用MailMessage上的AlternateViews属性

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx



3> 小智..:

只是想补充一点,你可以使用定义的常量MediaTypeNames.Text.HtmlMediaTypeNames.Text.Plain不是"text/html""text/plain",这总是一种更好的方式.它在System.Net.Mime命名空间中.

所以在上面的例子中,它将是:

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);


我会优先:var htmlView = AlternateView.CreateAlternateViewFromString(htmlContent,new ContentType(MediaTypeNames.Text.Html));

4> Aric TenEyck..:

我只是在这里为那些遇到问题的人找到一张便条,并找到他们的方式进入此页面 - 有时,Outlook SMTP服务器将重新转发外发电子邮件.如果你看到你的纯文本主体完全消失,除了base64编码的附件,它可能是因为你的服务器正在重新编码电子邮件.谷歌的SMTP服务器不会重新编码电子邮件 - 尝试通过那里发送,看看会发生什么.


我确实找到了我的方式(四年后)寻找那个.您或任何阅读此内容的人都知道如何在Microsoft Exchange Server 2010 SP3上停止它吗?

5> user1852503..:

除了使用AlternateViews视图添加html和纯文本视图之外,请确保您还没有设置Mail Message对象的主体.

// do not do this: 
var msg = new MailMessage(model.From, model.To);
msg.Body = compiledHtml;  

因为它会使您的电子邮件在两个视图中都包含html内容,从而覆盖其他视图.



6> 小智..:

对于像我这样的人,他们在gmail中显示纯文本部分而不是html部分。

Gmail似乎总是显示邮件的最后一部分。

因此,如果您在纯文本部分之前添加了html部分,那么gmail总是会显示纯文本变体。

要解决此问题,您只需在html部分之前添加纯文本部分。

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有