2016-12-08 7 views
2
using (MailMessage message = new MailMessage()) // using System.Net.Mail; 
    { 
     string mailFrom = "[email protected]"; 
     string smtpServer = "smtp.server.net"; 

     message.From = new MailAddress(mailFrom); 
     message.To.Add("[email protected]"); 
     message.Subject = "subject"; 
     message.SubjectEncoding = Encoding.UTF8; 

     message.IsBodyHtml = true; 
     message.Body = "<h1>VODA</h1>"; 
     message.BodyEncoding = Encoding.UTF8; 

     AlternateView plainView = AlternateView.CreateAlternateViewFromString("test content", Encoding.UTF8, "text/plain"); 
     message.AlternateViews.Add(plainView); 

     SmtpClient smtpClient = new SmtpClient(smtpServer); 

     smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
     smtpClient.UseDefaultCredentials = false; 
     smtpClient.Credentials = new System.Net.NetworkCredential("user", "pass"); 
     smtpClient.EnableSsl = true; 
     smtpClient.Port = 587; 
     smtpClient.Send(message); 
    } 

Lorsque vous ce qui a été reçu à gmail je vois suivante:Envoyer un message e-mail html et plainText comme une alternative

Subject: subject 
Content-Type: multipart/alternative; boundary=--boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e 
Message-Id: <[email protected]> 

----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: base64 

PGgxPlZPREE8L2gxPg== 
----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: base64 

dGVzdCBjb250ZW50 
----boundary_0_989afdbb-5fe4-4155-ba59-3d5ffdbb909e-- 

Pourquoi System.Net.Mail.MailMessage ne définit pas text/html type contect?

Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: base64 

PGgxPlZPREE8L2gxPg== 

Y a-t-il une propriété MailMessage supplémentaire que j'ai manquée?

Répondre

0

réponse est écrit dans cet article: GMail displays plain text email instead HTML

Essayez de changer l'ordre des parties du message, mettre la partie HTML après la partie texte brut. Cela peut fonctionner :). REMARQUE: Je ne me souviens pas maintenant où j'ai lu ceci (ou si j'en ai certainement fait), mais la raison pour laquelle le changement pourrait aider est parce que je pense que la partie préférée du message pourrait être la dernière partie. Mise à jour: J'ai trouvé un endroit où il est dit que les parties d'un message MIME en plusieurs parties devraient être dans l'ordre de préférence croissante - ici, dans la section 7.2.3, en commençant par le troisième au dernier paragraphe.

Après avoir ajouté text/html après text/plain gmail affiche le contenu html. Microsoft Exchange bien que montre la version html du message et cela ne dérange pas l'ordre dans lequel la version est ajoutée.

AlternateView plainView = AlternateView.CreateAlternateViewFromString("test content", Encoding.UTF8, "text/plain"); 
message.AlternateViews.Add(plainView); 

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, Encoding.UTF8, "text/html"); 
message.AlternateViews.Add(htmlView); 
2

Lorsque vous utilisez la AlternateViewsBody devrait être text/plain et AlternateViews pour livrer différents types de contenu. De la documentation (https://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx):

Pour ajouter une vue alternative à un objet MailMessage, créez une pièce jointe pour la vue, et puis l'ajouter à la collection retournée par AlternateViews. Utilisez la propriété Body pour spécifier la version texte et utilisez la collection AlternateViews pour spécifier des vues avec d'autres types MIME.

+0

Manqué cela, merci. – broadband