Skip to main content
 首页 » 编程设计

C# 在发送包含 **Plain-text** 和 **Html** 内容的电子邮件时遇到问题

2024年02月25日30hnrainll

我在发送包含纯文本 和Html 内容的电子邮件时遇到问题。 在 Outlook 2007 中,永远不会显示纯文本 消息。 在 Gmail 电子邮件客户端中,默认显示 plain-text。我需要 HTML 消息在 Outlook 和 Gmail 中显示为默认消息,但如果在该系统上进行此类设置,用户可以更改为纯文本。

我正在使用以下 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 中,将纯文本设置为默认 View 后,我看到 HTML 标记为字符串,它不显示我起草的与 html 略有不同的纯文本。另外,我如何在 Gmail 中测试纯文本电子邮件,就像现在在 Gmail 中一样,我只收到 HTML View ,但我没有找到任何方法来查看纯 TextView ,尽管我已经单击了查看原件并将 view=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); 
} 

请您参考如下方法:

我会尝试在纯 TextView 之后添加 html View 。

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