Как правильно добавить CSS в MailMessage

Я пишу некоторый HTML-код в MailMessage.Body и хотел бы включить некоторый CSS для форматирования шрифтов, таблиц и т. д. У меня возникли проблемы с правильным формированием окончательного HTML-кода.

Например:

public static void CreateMessageWithMultipleViews(string server, string recipients)
{
    // Create a message and set up the recipients.
    MailMessage message = new MailMessage("[email protected]","[email protected]");

    // Construct body as HTML. 
    message.Body = @"<html>
        <head>
            <style>
                p{
                    font-family:""Trebuchet MS"", Arial, Helvetica, sans-serif;
                    font-size:0.9em;
                    text-align:left;
                }
            </style>
        </head>
            <body>
                Some body text
            </body>
        </html>");

    // Set this property so that HTML renders
    message.IsBodyHtml = true;

    // Send the message.
    SmtpClient client = new SmtpClient(server);
    client.Credentials = CredentialCache.DefaultNetworkCredentials;
try 
{
    client.Send(message);
}
catch (Exception ex) 
{
    Console.WriteLine("Exception caught: {0}", 
    ex.ToString() );
}

Все мои получатели электронной почты используют Outlook 2010, и это выглядит точно так, как ожидалось. Но мне это не нравится — в конечном источнике электронной почты повторяются теги <html> и <header>:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
    </head>
<html>
    <head>
        <style>
            [..truncated..]

Итак, мой вопрос: как правильно установить HTML-источник электронной почты с помощью MailMessage, чтобы он был правильно сформирован? Я вижу свойство «Заголовок» в классе MailMessage, но оно предназначено для заголовков сообщений, а не для заголовков HTML. Нужно ли мне размещать код CSS где-то еще?


person tommy_o    schedule 18.11.2013    source источник


Ответы (1)


Имея в виду, что мне нужно правильно отображать только в Outlook 2010, я опускаю явные теги <html> и <header> и разрешаю MailMessage обрабатывать их:

message.Body = @"
        <style>
            <!--
            p{
                [truncating the rest...]
            }
            --->
        </style>";

Когда я получаю электронное письмо в Outlook, это формат источника, который работает для рендеринга, и он так же нелогичен, как и раньше (я исправил отступ для удобства чтения):

<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head>
<style>
    [css...]
</style>
<body>
    [content...]
</body>
</html>

CSS по-прежнему не содержится в теге, но на данный момент мне повезло, что HTML правильно отображается в клиенте Outlook.

person tommy_o    schedule 19.11.2013