有谁可以告诉我为什么以下代码在原始Html中发送电子邮件?就像在,查看页面源时,电子邮件就像。
我已经删除了代码,以便不包含附件和地址。
如果我使用备用视图禁用该行,则电子邮件会正确呈现,但我也想发送纯文本版本。
using (SmtpClient client = GetSmtpClient(settings)) {
using (MailMessage message = new MailMessage()) {
message.IsBodyHtml = true;
message.BodyEncoding = System.Text.Encoding.GetEncoding("iso-8859-1");
message.To.Add(toList);
message.Subject = subject;
message.Body = htmlTemplate;
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(textTemplate, new ContentType("text/plain")));
client.Send(message);
}
}
编辑:邮件最初发送文本作为主体,html作为替代视图,但我遇到了问题,如here所描述的重音和外来字符,并希望将IsBodyHtml
设置为true,这会强制我将html设置为主视图。
答案 0 :(得分:2)
我也遇到过这方面的问题,但这里有一个非常适合我的代码缩减版本......
private MailMessage CreateEmailMessage(string emailAddress) {
MailMessage msg = new MailMessage();
msg.From = new MailAddress(FromEmailAddress, FromName);
msg.To.Add(new MailAddress(emailAddress));
msg.Subject = "Msg Subject here";
string textBody = File.ReadAllText(TextTemplateFile);
string htmlBody = "";
if (EmailFormat == "html") {
htmlBody = File.ReadAllText(HtmlTemplateFile);
foreach (Attachment inline in InlineAttachments) {
inline.ContentDisposition.Inline = true;
msg.Attachments.Add(inline);
}
AlternateView alternateHtml = AlternateView.CreateAlternateViewFromString(htmlBody,
new ContentType("text/html"));
msg.AlternateViews.Add(alternateHtml);
AlternateView alternateText = AlternateView.CreateAlternateViewFromString(textBody,
new ContentType("text/plain"));
msg.AlternateViews.Add(alternateText);
}
else {
msg.Body = textBody;
}
return msg;
}
答案 1 :(得分:1)
最后我意识到传递给方法的'htmlTemplate'字符串是在电子邮件的头部定义charset=ISO-8859-1
,因此会覆盖我在代码中所做的任何更改。
我将字符集更改为UTF-8
,并将我的代码恢复为:
using (SmtpClient client = GetSmtpClient(settings)) {
using (MailMessage message = new MailMessage()) {
message.To.Add(toList);
message.Subject = subject;
message.Body = textTemplate;
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(htmlTemplate, new ContentType("text/html")));
client.Send(message);
}
}
现在可以发送文本和html模板以及覆盖重音字符问题。