我在发送包含纯文本和HTML内容的电子邮件时遇到了麻烦。在Outlook 2007中,永远不会显示纯文本邮件。并且在Gmail电子邮件客户端中默认显示纯文本。我需要在Outlook和Gmail中将HTML消息显示为默认值,但如果在该系统上进行此类设置,则用户可以更改为纯文本。
我使用以下C#代码发送电子邮件:
private void SendEmail(string server, string from, string userName, string password, int port , string recipients)
{
MailMessage message = new MailMessage(from,recipients);
message.Subject = "This email message has multiple views.";
message.From = new MailAddress(from);
message.To.Add(recipients);
message.IsBodyHtml = false;
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>This is some HTML text2</h1></body></html>", null, MediaTypeNames.Text.Html));
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("This is some plain text2", null, MediaTypeNames.Text.Plain));
SmtpClient client = new SmtpClient(server);
client.Port = port;
NetworkCredential SMTPUserInfo = new NetworkCredential(userName, password);
client.UseDefaultCredentials = false;
client.Credentials = SMTPUserInfo;
client.Send(message);
}
这段代码的问题是(我不确定),在Outlook 2007中,电子邮件内容最初显示如下图像(默认呈现HTML正文作为纯文本):
当我右键单击并选择“显示为HTML”时,电子邮件内容将显示如下图像(呈现HTML正文):
当我使用gmail.com查看电子邮件时,电子邮件内容就会显示如下图像(默认呈现纯文本):
编辑1:正如我所建议的那样,我对代码进行了更改,现在我可以看到Gmail中的HTML电子邮件内容了。但是在将纯文本设置为默认视图后的Outlook 2007中,我将HTML标记视为字符串,并且它不显示我已经草拟的纯文本,这与html略有不同。另外我如何测试Gmail中的纯文本电子邮件,因为现在在gmail我只接收HTML视图,虽然我点击了视图原始并且更改了视图= om到view = dom,但我没有找到任何方式来查看纯文本视图网址,因为我在谷歌某处读过它。
private void SendEmail(string server, string from, string userName, string password, int port , string recipients)
{
MailMessage message = new MailMessage(from,recipients);
message.Subject = "This email message has multiple views.";
message.From = new MailAddress(from);
message.To.Add(recipients);
message.Body = "This is some plain text2";
message.IsBodyHtml = true;
message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("<html><head></head><body><h1>This is some HTML text2</h1></body></html>", null, MediaTypeNames.Text.Html));
//message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("This is some plain text2", null, MediaTypeNames.Text.Plain));
SmtpClient client = new SmtpClient(server);
client.Port = port;
NetworkCredential SMTPUserInfo = new NetworkCredential(userName, password);
client.UseDefaultCredentials = false;
client.Credentials = SMTPUserInfo;
client.Send(message);
}
我会尝试在纯文本视图后添加html视图。
此外,我通常将IsBodyHtml标志设置为true,即使我已经定义了两个视图。
您应该将MailMessage.Body
设置为明文。然后像AlternateViews
一样添加html文本。至少这是我总是用文本和HTML发送电子邮件的方式。电子邮件客户端应该自动选择html,如果它能够显示。它不应该像现在一样显示“备用视图”。
编辑:
我不会将'IsBodyHtml'设置为true,它可能会混淆邮件程序,因为它是纯文本。
另外我会将编码设置为Encoding.UTF8
,但我怀疑这会解决这个问题。
Aaditi:
刚检查了我的邮件发件人代码。我总是设置'消息ID'标题,不知道是否重要:
mailMessage.Headers.Add("message-id", "<" + DateTime.Now.Ticks + "@example.com>");