2011-11-11 28 views
0

我在发送HTML电子邮件时测试备用视图的问题。我正在创建以纯文本形式发送邮件消息,但是我包含一个HTML备用视图。我曾尝试使用多个电子邮件客户端,但我一直无法看到纯文本版本。我主要关心的是,只使用纯文本客户端的人不会正确地看到它。见下面代码:C#HTML电子邮件 - 替代视图

MailMessage message = new MailMessage(); 

message.To.Add("email"); 
message.From = new MailAddress("fromaddress"); 
message.Subject = "subject" 
//Plain text version of e-mail 
message.Body = _formattedPlainText; 
message.IsBodyHtml = false; 

AlternateView htmlView = CreateHTMLView(); 

message.AlternateViews.Add(htmlView); 
//message.AlternateViews.Add(plainTextView); 

smtp.Send(message); 

private AlternateView CreateHTMLView() 
{ 
    AlternateView htmlView = AlternateView.CreateAlternateViewFromString(_formattedHTML, null, System.Net.Mime.MediaTypeNames.Text.Html); 

    //Code for adding embedded images... 

    return htmlView; 
} 

有没有理由相信纯文本版本没有被接受还是有,你知道那绝对只能接收纯文本电子邮件的任何客户端?

在此先感谢

UPDATE:“消息文本乱码”

您可以通过按下选项箭头并选择选项强制GMAIL纯文本

+0

大多数现代读者将默认阅读HTML。您可以尝试在Linux系统上的Pine中打开它,我相信这会放弃HTML视图。可能有一种简单的方法来强制Outlook或其他应用程序仅以纯文本格式(用于测试)查看,但我不确定选项。 –

回答

1

有没有理由相信纯文本版本没有接收 还是有,你知道那绝对只能接收 纯文本电子邮件的任何客户端?

不,和PINE

您可以在任何* nix OS中使用邮件命令来阅读电子邮件。它只会以文本格式显示电子邮件。

UPDATE

A guy here,索赔,如果给出的选项,Gmail只会显示在纯文本电子邮件。如果情况依然如此,我发现谷歌的一个尴尬的默认选择。

+0

松树+1。 :D –

+0

@DarkBobG:哈哈我喜欢PINE,是我在Linux的邮件客户端。使用它,因为Slackware 95 :) – Icarus

+0

感谢您的快速回答。 Gmail绝对不会为我选择纯文本版本。我会查看是否有任何设置可以将它强制为纯文本。仍然在寻找最简单的客户端,并进行快速设置。我已经看到了电子邮件的来源,它肯定使用我所知道的正确的MIME类型: Content-Type:multipart/alternative; \t boundary =“ - boundary_0_510b3ccc-889b-4b81-9e66-d6fd828a410b” – Martini48

1

通过一些试验,我有最好的结果是这样的:

设置两个备用的观点,一个HTML和一个纯文本。 然后,单独留下MailMessage.Body(默认/未定义),并且 保留默认的MailMessage.IsBodyHtml。我的代码段:

   myMessage.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(HtmlMessage, new System.Net.Mime.ContentType("text/html"))); 
     myMessage.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(TextMessage, new System.Net.Mime.ContentType("text/plain"))); 
    // myMessage.Body = HtmlMessage; 
    // myMessage.IsBodyHtml = true; 
     myClient.UseDefaultCredentials = false; 
     NetworkCredential credentials = new NetworkCredential("xxxx","xxxxx"); 
     myClient.Credentials = credentials; 
     myClient.DeliveryMethod = SmtpDeliveryMethod.Network; 

我测试过这个消息发送到Windows Outlook客户端和Mac用户,它似乎工作得很好。电子邮件客户端软件选择视图。我仍然需要测试它如何适用于webmail应用程序等客户端。你的旅费可能会改变。

鲍勃