C#在发送包含**纯文本**和** Html **内容的电子邮件时遇到问题

问题描述 投票:1回答:2

我在发送包含纯文本和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正文作为纯文本):

enter image description here

当我右键单击并选择“显示为HTML”时,电子邮件内容将显示如下图像(呈现HTML正文):

enter image description here

当我使用gmail.com查看电子邮件时,电子邮件内容就会显示如下图像(默认呈现纯文本):

enter image description here

编辑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);
}
c# smtpclient
2个回答
2
投票

我会尝试在纯文本视图后添加html视图。

此外,我通常将IsBodyHtml标志设置为true,即使我已经定义了两个视图。


1
投票

您应该将MailMessage.Body设置为明文。然后像AlternateViews一样添加html文本。至少这是我总是用文本和HTML发送电子邮件的方式。电子邮件客户端应该自动选择html,如果它能够显示。它不应该像现在一样显示“备用视图”。

编辑:

我不会将'IsBodyHtml'设置为true,它可能会混淆邮件程序,因为它是纯文本。

另外我会将编码设置为Encoding.UTF8,但我怀疑这会解决这个问题。

Aaditi:

刚检查了我的邮件发件人代码。我总是设置'消息ID'标题,不知道是否重要:

 mailMessage.Headers.Add("message-id", "<" + DateTime.Now.Ticks + "@example.com>");
© www.soinside.com 2019 - 2024. All rights reserved.