2010-03-13 11 views
5

Znalazłem ten mały kod, który wysyła wiadomości e-mail do użytkowników Gmaila. Chciałbym, aby treść wiadomości zawierała html (na przykład dekodowanie linku, w którym będzie przechowywany inny tekst niż adres URL, na który wskazuje).Wysyłaj wiadomości smtp, w tym html, na konto Gmail

Używam C# .net 3.5. Użyłem tych klas w moim kodu:

  • MailMessage
  • smtpclient

Jak można to zrobić?

Oto kopia mojego kodu:

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

Dzięki!

+1

jakim języku/platforma/ramy przynajmniej byłaby pomoc, niby da się odpowiedzieć bez żadnych szczegółów. –

+0

ok, edytowane. dziękuję – vondip

+0

Proszę napisać kod, który ukończyłeś i przykład tego, co próbujesz osiągnąć. Generalnie powinieneś po prostu przekazać kod HTML, to od strony odbiorcy zależy, co z nim zrobić. Może być konieczne ustawienie nagłówka, ale bez zobaczenia kodu, nie mogę powiedzieć. – GrayWizardx

Odpowiedz

8

Coś jak to powinno działać:

Zauważ, że MailMessage dotyczy System.Net.MailMessage. Jest też System.Web.MailMessage, którego nigdy nie używałem i - o ile wiem - jest przestarzały.

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

Dla bardziej wyrafinowanych rozwiązań szablonowych, które czynią html ciała zamiast ciężko codin to nie jest, na przykład, EMailTemplateService w MvcContrib które można użyć jako wskazówkę.

+0

OK, nie jestem pewien, dlaczego mój kod nie działał wcześniej. Tutaj skopiowałem twój kod i działa świetnie, dziękuję! – vondip

+0

@AaronPatten: Czy mogę zasugerować, aby sformułować to jako nowe pytanie? Ożywienie 5-letniego wątku często nie jest tak obiecujące, ponieważ z czasem rzeczy zmieniają się bardzo często, a tylko nieliczne osoby zostaną powiadomione ... Również "nie wyświetla się w perspektywie" nie jest zbyt precyzyjne - co jak dokładnie wygląda to, co pokazują nagłówki tego widoku, czy możesz zapisać/przesłać plik .eml, w jakim środowisku uruchomi się kod, itp. będą to punkty, które twoje pytanie powinno dotyczyć (nie tutaj, w nowym pytaniu). – mnemosyn

3

Jednym ze sposobów, aby to zrobić jest stworzenie alternatywnego widoku HTML 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); 
Powiązane problemy