web-dev-qa-db-fra.com

Envoyer un email HTML via C # avec SmtpClient

Comment envoyer un email HTML? J'utilise le code dans cette réponse pour envoyer des courriers électroniques avec SmtpClient, mais ils sont toujours en texte brut, de sorte que le lien dans l'exemple de message ci-dessous n'est pas formaté comme tel.

<p>Welcome to SiteName. To activate your account, visit this URL: <a href="http://SiteName.com/a?key=1234">http://SiteName.com/a?key=1234</a>.</p>

Comment activer le HTML dans les messages électroniques que j'envoie?

40
user34537

C'est ce que je fais:

MailMessage mail = new MailMessage(from, to, subject, message);
mail.IsBodyHtml = true;
SmtpClient client = new SmtpClient("localhost");
client.Send(mail);

Notez que j'ai défini le message HTML sur true: mail.IsBodyHtml = true;

84
Josiah Peters

Je crois que c'était quelque chose comme:

mailObject.IsBodyHtml = true;
18
Ropstah

IsBodyHtml = true est sans aucun doute la partie la plus importante. 

Mais si vous voulez fournir un email avec une partie text/plain et une partie text/html composée en alternance, il est également possible d'utiliser la classe AlternateView:

MailMessage msg = new MailMessage();
AlternateView plainView = AlternateView
     .CreateAlternateViewFromString("Some plaintext", Encoding.UTF8, "text/plain");
// We have something to show in real old mail clients.
msg.AlternateViews.Add(plainView); 
string htmlText = "The <b>fancy</b> part.";
AlternateView htmlView = 
     AlternateView.CreateAlternateViewFromString(htmlText, Encoding.UTF8, "text/html");
msg.AlternateViews.Add(htmlView); // And a html attachment to make sure.
msg.Body = htmlText;  // But the basis is the html body
msg.IsBodyHtml = true; // But the basis is the html body
16
faester

Appliquez le bon encodage du Mailbody.

mail.IsBodyHtml = true;
8
Bdiem

j'ai une idée, vous pouvez ajouter une case à cocher à votre projet pour l'envoi d'email au format HTML en tant qu'option pour l'utilisateur, et ajouter ce code pour l'activer:

         MailMessage mail = new MailMessage(from, to, subject, message);

         if(checkBox1.CheckState == CheckState.Checked )
           {
               mail.IsBodyHtml = true;
           }

         SmtpClient client = new SmtpClient("localhost");

         client.Send(mail);
1
nassimlouchani

Si vous utilisez Mailkit , nous pouvons utiliser TextBody, HtmlBody et Both pour le corps du message. Il suffit d'écrire ce code. Cela vous aidera

            MimeMessage mailMessage = new MimeMessage();
            mailMessage.From.Add(new MailboxAddress(senderName, [email protected]));
            mailMessage.Sender = new MailboxAddress(senderName, [email protected]);
            mailMessage.To.Add(new MailboxAddress(emailid, emailid));
            mailMessage.Subject = subject;
            mailMessage.ReplyTo.Add(new MailboxAddress(replyToAddress));
            mailMessage.Subject = subject;
            var builder = new BodyBuilder();
            builder.HtmlBody = "Hello There";            
            try
            {
                using (var smtpClient = new SmtpClient())
                {
                    smtpClient.Connect("HostName", "Port", MailKit.Security.SecureSocketOptions.None);
                    smtpClient.Authenticate("[email protected]", "password");

                    smtpClient.Send(mailMessage);
                    Console.WriteLine("Success");
                }
            }
            catch (SmtpCommandException ex)
            {
                Console.WriteLine(ex.ToString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());                
            }
0
Naveen Soni