отправлять сообщения SMTP, включая HTML, на учетную запись Gmail - PullRequest
5 голосов
/ 13 марта 2010

Я нашел этот небольшой код, который отправляет электронную почту пользователям Gmail. Я бы хотел, чтобы тело письма содержало html (например, расшифровывая ссылку, чтобы он содержал текст, отличный от URL, на который он указывает).

Я использую c # .net 3.5. Я использовал эти классы в своем коде:

  • MailMessage
  • SmtpClient

Как это можно сделать?

Вот копия моего кода:

            MailMessage message = new MailMessage("me@gmail.com", 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("him@gmail.com", "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);

Спасибо!

Ответы [ 2 ]

8 голосов
/ 13 марта 2010

Примерно так должно работать:

Обратите внимание, что MailMessage относится к System.Net.MailMessage. Есть также System.Web.MailMessage, который я никогда не использовал и, насколько я знаю, устарел.

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("someone@gmail.com");

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

Для более сложных шаблонных решений, которые визуализируют тело HTML, а не жестко кодируют его, есть, например, EMailTemplateService в MvcContrib, который вы можете использовать в качестве руководства.

3 голосов
/ 13 марта 2010

Один из способов сделать это - создать альтернативное HTML-представление электронной почты:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...