在.net中以HTML和纯文本形式发送邮件
时间:2020-03-05 18:47:54 来源:igfitidea点击:
我正在使用SmtpClient从CApplication发送邮件。效果很好,但是我必须决定是否要将邮件以纯文本或者HTML格式发送。我想知道,是否可以同时发送两者?我认为这称为多部分。
我用谷歌搜索了一下,但是大多数示例基本上都没有使用SmtpClient,而是自己组成了整个SMTP主体,这有点"吓人",所以我想知道.net Framework 3.0是否内置了某些东西吗?
如果不是,是否存在使用得当/强大的第三方库来发送电子邮件?
解决方案
回答
我们想要做的是使用MailMessage上的AlternateViews属性
http://msdn.microsoft.com/zh-CN/library/system.net.mail.mailmessage.alternateviews.aspx
回答
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);
回答
只是要补充一点,我们可以使用定义的常量MediaTypeNames.Text.Html和MediaTypeNames.Text.Plain代替" text / html"和" text / plain",这始终是首选方法。在" System.Net.Mime"命名空间中。
因此,在上面的示例中,它将是:
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);
回答
我只是在这里为有问题并有时会找到此页面的任何人添加注释,Outlook SMTP服务器将重新转换外发电子邮件。如果我们看到纯文本主体完全消失,除了以base64编码的附件之外什么都没有,则可能是因为服务器正在重新编码电子邮件。 Google的SMTP服务器不会重新编码电子邮件,然后尝试通过那里发送,看看会发生什么。