2010-03-31 30 views
15

Sto testando l'invio di alcune e-mail tramite C#, ma non posso dire quale effetto ha l'impostazione da IsBodyHtml a true. Indipendentemente dal valore, qualunque cosa invii nel mio corpo si presenta con un tipo di contenuto di "text/plain" e il mio HTML mostra tag e tutto nel mio client di posta elettronica (gmail). In realtà cosa dovrebbe fare quella bandiera?Che cosa fa MailMessage.IsBodyHtml?

NOTA: Posso inviare un'e-mail HTML semplicemente creando un AlternateView con un tipo di contenuto di "testo/html", voglio solo capire come l'impostazione del corpo dovrebbe funzionare.

risposta

17

Ecco un estratto per il mio aiuto SMTP che uso tutti i giorni ....

public bool SendMail(string strTo, string strFrom, string strCc, string strBcc, string strBody, string strSubject) 
{ 

    bool isComplete = true; 

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

    try 
    { 
     //Default port will be 25 
     smtpClient.Port = 25; 

     message.From = new MailAddress(smtpEmailSource); 
     message.To.Add(strTo); 
     message.Subject = strSubject; 

     if (strCc != "") { message.Bcc.Add(new MailAddress(strCc)); } 
     if (strBcc != "") { message.Bcc.Add(new MailAddress(strBcc)); } 

     message.IsBodyHtml = true; 

     string html = strBody; //I usually use .HTML files with tags (e.g. {firstName}) I replace with content. This allows me to edit the emails in VS by opening a .HTML file and it's easy to do string replacements. 

     AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, new ContentType("text/html")); 

     message.AlternateViews.Add(htmlView); 


     // Send SMTP mail 
     smtpClient.Send(message); 
    } 
    catch 
    { 
     isComplete = false; 
    } 

    return isComplete; 
} 

[UPDATE]

I punti chiave come ho inizialmente lasciato fuori ...

  1. IsBodyHtml afferma che il messaggio è in formato HTML. Se stavi inviando una sola vista di HTML, questo è tutto ciò di cui hai bisogno.

  2. AlternateView è utilizzato per memorizzare il mio codice HTML, non è necessario per l'invio di un messaggio HTML ma è necessario se si desidera inviare un messaggio che include HTML e Testo normale, nel caso in cui il ricevitore non sia in grado di visualizzare l'HTML.

ho tirato fuori il mio Plainview sopra quindi questo non è ovvio, mi dispiace ...

La chiave qui è che se si desidera inviare un messaggio in formato HTML è necessario utilizzare IsBodyHtml = true (il valore predefinito è falso) per rendere il tuo contenuto reso come HTML.

+0

Questo è in realtà quello che faccio pure. Sono solo curioso di sapere cosa dovrebbe accadere se assegno l'HTML al corpo con IsBodyHtml impostato su true invece di utilizzare un AlternateView. –

+0

Suppongo che la proprietà Body sia solo una scorciatoia per 'AlternateView' e tra' IsBodyHTML true/false' stai specificando che 'Body' è in chiaro o HTML. Se si desidera inviare solo un corpo in formato RTF e non è possibile utilizzare la proprietà Body, è necessario creare una visualizzazione alternativa in modo da poter specificare il tipo di contenuto per RTF. –

15

Ho appena affrontato questo stesso problema. La soluzione migliore era evitare di impostare la proprietà dell'oggetto. Invece basta aggiungere due AlternateView s, prima un testo semplice e poi un HTML. Assicurati di aggiungere prima la versione in testo semplice perché lo standard MIME dice che:

I formati sono ordinati in base a quanto fedeli sono all'originale, con i meno fedeli primi e gli ultimi più fedeli.

Ciò significa che prima si inserisce la versione in testo semplice, quindi i client dovrebbero utilizzare la versione HTML, se possibile.

-2

IsBodyHtml - Specificare se il corpo contiene testo o contrassegni HTML.

Il corpo contiene testo o markup html che deve essere identificato da IsBodyHtml.