2010-03-13 6 views
5

J'ai trouvé ce petit code qui envoie un courriel aux utilisateurs de Gmail. J'aimerais que le corps du message contienne html (par exemple, décoder un lien pour qu'il contienne un texte différent de l'URL vers laquelle il pointe). Je utilise C# .net 3.5. Je l'ai utilisé ces classes dans mon code:envoyer le courrier SMTP y compris html au compte gmail

  • MailMessage
  • SmtpClient

Comment cela peut-il être fait?

Voici une copie de mon code:

  MailMessage message = new MailMessage("[email protected]", WebCommon.UserEmail, "Test", context.Server.HtmlEncode("<html> <body> <a href='www.cnn.com'> test </a> </body> </html> ")); 
      System.Net.NetworkCredential cred = new System.Net.NetworkCredential("[email protected]", "myPwd"); 
      message.IsBodyHtml = true; 

      System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com"); 

      smtp.UseDefaultCredentials = false; 
      smtp.EnableSsl = true; 
      smtp.Credentials = cred; 
      smtp.Port = 587; 

      smtp.Send(message); 

Merci!

+1

Quelle langue/plate-forme/cadre au moins serait une aide, à peu près impossible de répondre sans aucun détail. –

+0

ok, édité. merci – vondip

+0

S'il vous plaît poster le code que vous avez terminé et un exemple de ce que vous essayez d'accomplir. En général, vous devriez juste passer le HTML, c'est à la réception de décider ce qu'il faut faire avec. Vous pourriez avoir besoin de définir un en-tête, mais sans voir votre code je ne peux pas dire. – GrayWizardx

Répondre

8

Quelque chose comme cela devrait fonctionner:

Notez que MailMessage fait référence à System.Net.MailMessage. Il y a aussi System.Web.MailMessage, que je n'ai jamais utilisé et, autant que je sache, est obsolète.

MailMessage message = new MailMessage(); 
// Very basic html. HTML should always be valid, otherwise you go to spam 
message.Body = "<html><body><p>test</p></body></html>"; 
// QuotedPrintable encoding is the default, but will often lead to trouble, 
// so you should set something meaningful here. Could also be ASCII or some ISO 
message.BodyEncoding = Encoding.UTF8; 
message.IsBodyHtml = true; 
// No Subject usually goes to spam, too 
message.Subject = "Some Subject"; 
// Note that you can add multiple recipients, bcc, cc rec., etc. Using the 
// address-only syntax, i.e. w/o a readable name saves you from some issues 
message.To.Add("[email protected]"); 

// SmtpHost, -Port, -User, -Password must be a valid account you can use to 
// send messages. Note that it is very often required that the account you 
// use also has the specified sender address associated! 
// If you configure the Smtp yourself, you can change that of course 
SmtpClient client = new SmtpClient(SmtpHost, SmtpPort) { 
      Credentials = new NetworkCredential(SmtpUser, SmtpPassword), 
      EnableSsl = enableSsl; 
     }; 

     try { 
      // It might be necessary to enforce a specific sender address, see above 
      if (!string.IsNullOrEmpty(ForceSenderAddress)) { 
       message.From = new MailAddress(ForceSenderAddress); 
      } 
      client.Send(message); 
     } 
     catch (Exception ex) { 
      return false; 
     } 

Pour des solutions plus sophistiquées de création de modèles qui rendent le code html du corps plutôt que dur Codin, il y a, par exemple, le EMailTemplateService dans MvcContrib que vous pouvez utiliser comme ligne directrice.

+0

ok, je ne sais pas pourquoi mon code n'a pas fonctionné avant. J'ai copié ton code ici et ça marche super, merci! – vondip

+0

@AaronPatten: Puis-je vous suggérer de formuler cela comme une nouvelle question? Raviver un fil de 5 ans n'est souvent pas très prometteur car les choses changent un peu au fil du temps, et très peu de personnes seront averties ... Aussi, "ne rend pas dans les perspectives" n'est pas très précis - ce que est-ce que ça ressemble, exactement, quels sont les en-têtes que les perspectives montrent, pouvez-vous sauvegarder/uploader le fichier .eml, dans quel environnement s'exécute votre code, etc. serait votre point de réponse (pas ici, dans une nouvelle question). – mnemosyn

3

Une façon de le faire est de créer une vue html autre de l'e-mail:

MailMessage message = new MailMessage(); 
message.Body = //plain-text version of message 
//set up message... 

//create html view 
string htmlBody = "<html>...</html>"; 
htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html"); 
message.AlternateViews.Add(htmlView); 

//send message 
smtpClient.Send(message); 
Questions connexes