2010-03-13 3 views
5

Ich habe diesen kleinen Code gefunden, der E-Mails an Google Mail-Benutzer sendet. Ich möchte, dass der Text der E-Mail HTML enthält (z. B. einen Link dekodieren, der einen anderen Text enthält als die URL, auf die er verweist).send smtp mail incl. Html to gmail account

Ich verwende C# .net 3.5.

  • Mailmessage
  • SmtpClient

Wie kann dies getan werden: Ich habe diese Klassen in meinem Code verwendet?

Hier ist eine Kopie meines 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); 

Dank!

+1

Welche Sprache/Plattform/Rahmen zumindest würde ohne Details zu beantworten eine Hilfe, eine Art unmöglich. –

+0

ok, bearbeitet. danke – vondip

+0

Bitte schreiben Sie den Code, den Sie abgeschlossen haben und ein Beispiel von dem, was Sie erreichen möchten. Im Allgemeinen sollten Sie nur den HTML-Code übergeben, es liegt an der Empfängerseite zu entscheiden, was damit zu tun ist. Möglicherweise müssen Sie eine Kopfzeile festlegen, aber ohne Ihren Code zu sehen kann ich nicht sagen. – GrayWizardx

Antwort

8

So etwas sollte funktionieren:

Beachten Sie, dass MailMessage-System.Net.MailMessage bezieht. Es gibt auch System.Web.MailMessage, die ich noch nie benutzt habe und - soweit ich weiß - veraltet ist.

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; 
     } 

Für anspruchsvollere Templat-Lösungen, die den Körper html anstatt hart die Mar es machen, es wird zum Beispiel die EMailTemplateService in MvcContrib, die Sie als Richtlinie verwenden.

+0

ok, ich bin mir nicht sicher, warum mein Code vorher nicht funktioniert hat. Ich habe deinen Code hier kopiert und es funktioniert super, danke! – vondip

+0

@AaronPatten: Darf ich vorschlagen, dass Sie das als neue Frage formulieren? Einen 5 Jahre alten Thread wiederzubeleben, ist oft nicht so vielversprechend, weil sich die Dinge im Laufe der Zeit ziemlich ändern und nur sehr wenige Leute benachrichtigt werden ... Auch ist "nicht in Outlook anzeigen" nicht sehr präzise - was? Sieht es so aus, genau, was sind die Header, die Outlook zeigt, kannst du die .eml-Datei speichern/hochladen, in welcher Umgebung läuft dein Code, etc. wären Punkte, die deine Frage adressieren sollte (nicht hier, in einer neuen Frage)). – mnemosyn

3

Eine Möglichkeit, es zu tun ist, eine alternative HTML-Ansicht der E-Mail zu erstellen:

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);