2009-09-21 5 views
4

У меня есть приложение ASP.Net/MVC, и я пытаюсь отправить HTML-письма. Я делаю это, читая в HTML-файл с токенами, а затем заменяя токены. Эта часть прекрасно и генерирует HTML, что это именно то, что я хочу, но когда я отправить электронную почту, то, что я получаю как выглядит -Проблема отправки электронной почты с SmtpClient в C#

<style type=3D"text/css">= 
=0D=0A.styleTitles=0D=0A{=0D=0Afont-weight:=bold;=0D=0A}=0D=0A 
.style1=0D=0A  {=0D=0A 

и должен выглядеть

<style type="text/css"> 
    .styleTitles 
    { 
     font-weight: bold; 
    } 
    .style1 
    { 
     height: 15px; 
    } 

Я посмотрел в Интернете, и я не могу найти правильный синтаксис для отправки сообщения. Я видел некоторые решения, но никто не работает.

Мой текущий код теста -

SmtpClient smtpclient = new SmtpClient(); 
MailMessage message = new MailMessage(); 

MailAddress SendFrom = new MailAddress("[email protected]"); 
MailAddress SendTo = new MailAddress("[email protected]"); 
MailMessage MyMessage = new MailMessage(SendFrom, SendTo); 

var plainView = AlternateView.CreateAlternateViewFromString(msgBody,null,"text/html"); 
plainView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit; 
MyMessage.AlternateViews.Add(plainView); 
MyMessage.IsBodyHtml = true; 
MyMessage.Subject = subjectLine; 
MyMessage.Body = msgBody; 
smtpclient.Send(MyMessage); 

Любые предложения?

ответ

6

Может быть что-то вроде этого:

var plainView = AlternateView.CreateAlternateViewFromString(msgBody, new ContentType("text/plain; charset=UTF-8")); 

MyMessage.AlternateViews.Add(plainView); 
MyMessage.BodyEncoding = Encoding.UTF8; 
MyMessage.IsBodyHtml = true; 
MyMessage.Subject = subjectLine; 
MyMessage.Body = msgBody; 
+0

Это приводит к тому, что сообщение отправляется в кодировке base64 и, похоже, работает. спасибо Я отследил реальную проблему до того, что по умолчанию параметр «Content-Transfer-Encoding: quoted-printable» вызывает всю проблему. Выделенная кавычка предназначена для замены \ n с = 0D, \ r с = 0A и = as = 3D. Я не нашел хорошего способа изменить кодировку передачи, так что это будет 8 бит, что было бы проще. Так или иначе. Благодарю. –

3

Попробуйте это изменение:

plainView.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; 
+0

D id, похоже, не имеет никакого эффекта –

0

Это не может быть ответом вам нужно, но вы рассматривали использование XSLT для перевода ваших сообщений электронной почты? Я занят проектом, который отправляет электронные письма, и довольно приятно использовать XSLT в качестве части решения. Также означает, что в будущем шаблон может быть легко настроен стандартно стандартизированным образом, возможно, вам стоит подумать об изменении?

+0

У вас есть точка, но код уже работает намного лучше, чем требуется клиенту. Так что переписывание на самом деле не в порядке. Однако я буду помнить об этом в следующем проекте –

3

Чтобы установить кодировку передачи в 8bit, взятый из here, вы должны:

message.Body = null; 
using (AlternateView body = 
AlternateView.CreateAlternateViewFromString(
    "Some Message Body", 
    message.BodyEncoding, 
    message.IsBodyHtml ? "text/html" : null)) 
{ 
body.TransferEncoding = 
    TransferEncoding.SevenBit; 
message.AlternateViews.Add(body); 
} 
0

Это странно, но более простой код написан для меня :

var message = new MailMessage(Email, mailTo); 
message.IsBodyHtml = true; 
message.SubjectEncoding = message.BodyEncoding = Encoding.UTF8; 
message.Subject = "Subject"; 
message.Body = msgBody; 
smtpclient.Send(message); 
-1
string emailMessage="a skjdhak kdkand"; 
MailMessage mail = new MailMessage(); 
        mail.To.Add(obj_Artist.EmailAddress); 
        mail.From = new MailAddress(EmailList[0].FromEmail, "Sentric Music - Rights Management"); 
         mail.Subject = (EmailList[0].Subject); 

        if (EmailList[0].BCC1 != null && EmailList[0].BCC1 != string.Empty) 
        { 
         mail.Bcc.Add(EmailList[0].BCC1); 
        } 
        if (EmailList[0].BCC2 != null && EmailList[0].BCC2 != string.Empty) 
        { 
         mail.Bcc.Add(EmailList[0].BCC2); 
        } 
        if (EmailList[0].CC1 != null && EmailList[0].CC1 != string.Empty) 
        { 
         mail.CC.Add(EmailList[0].CC1); 
        } 
        if (EmailList[0].CC2 != null && EmailList[0].CC2 != string.Empty) 
        { 
         mail.CC.Add(EmailList[0].CC2);`enter code here` 
        } 


        string Body = emailMessage; 


        mail.Body = Body; 
        mail.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
        mail.IsBodyHtml = true; 
        AlternateView plainView = AlternateView.CreateAlternateViewFromString 
        (System.Text.RegularExpressions.Regex.Replace(Body, @"<(.|\n)*?>", string.Empty), null, "text/plain"); 
        System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(Body, null, "text/html"); 
        mail.AlternateViews.Add(plainView); 
        mail.AlternateViews.Add(htmlView); 
        SmtpClient smtp = new SmtpClient(); 
        smtp.EnableSsl = true; 
        smtp.Send(mail); 
Смежные вопросы