51 votes

Envoi d'un courrier au format HTML et texte brut en .net

J'envoie du courrier depuis mon application C#, en utilisant le SmtpClient. Cela fonctionne très bien, mais je dois décider si je veux envoyer le courrier en texte brut ou en HTML. Je me demande s'il existe un moyen d'envoyer les deux ? Je pense que cela s'appelle multipart.

J'ai fait quelques recherches sur Internet, mais la plupart des exemples n'utilisaient pas SmtpClient, mais composaient eux-mêmes l'ensemble du corps du SMTP, ce qui est un peu "effrayant". Je me demande donc si quelque chose est intégré dans le .net Framework 3.0 ?

Sinon, existe-t-il une bibliothèque tierce vraiment bien utilisée/robuste pour l'envoi de courriers électroniques ?

61voto

Michael Stum Points 72046

La documentation MSDN semble oublier une chose cependant, j'ai dû définir le type de contenu manuellement, mais sinon, cela fonctionne comme un charme :-)

MailMessage msg = new MailMessage(username, nu.email, subject, body);
msg.BodyEncoding = Encoding.UTF8;
msg.SubjectEncoding = Encoding.UTF8;

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent);
htmlView.ContentType = new System.Net.Mime.ContentType("text/html");
msg.AlternateViews.Add(htmlView);

44voto

Nick Berardi Points 31361

Ce que vous voulez faire est d'utiliser la propriété AlternateViews sur le MailMessage

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews.aspx

33voto

Je veux juste ajouter que vous pouvez utiliser des constantes définies. MediaTypeNames.Text.Html y MediaTypeNames.Text.Plain au lieu de "text/html" y "text/plain" ce qui est toujours préférable. C'est en System.Net.Mime espace de noms.

Donc, dans l'exemple ci-dessus, ce serait :

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlContent, null, MediaTypeNames.Text.Html);

11voto

Aric TenEyck Points 5434

Je vais juste mettre une note ici pour tous ceux qui ont des problèmes et qui se retrouvent sur cette page - parfois, les serveurs SMTP d'Outlook reconvertissent les e-mails sortants. Si vous constatez que le corps de votre message en texte brut disparaît entièrement et que seules les pièces jointes sont codées en base64, c'est peut-être parce que votre serveur réencode l'e-mail. Le serveur SMTP de Google ne réencode pas les e-mails. Essayez de les envoyer par ce biais et voyez ce qui se passe.

9voto

user1852503 Points 330

En plus d'utiliser les vues AlternateViews pour ajouter à la fois la vue html et la vue en texte brut, Assurez-vous que vous ne définissez pas également le corps du message de courrier. objet.

// do not do this: 
var msg = new MailMessage(model.From, model.To);
msg.Body = compiledHtml;  

En effet, votre courriel contiendra le contenu html dans les deux vues, en remplaçant les vues alternatives.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X