如何在 MailMessage 中正确添加 CSS
Posted
技术标签:
【中文标题】如何在 MailMessage 中正确添加 CSS【英文标题】:How to Properly Add CSS in a MailMessage 【发布时间】:2013-12-02 08:17:49 【问题描述】:我正在向 MailMessage.Body 写入一些 html,并希望包含一些 CSS 来格式化字体、表格等。我无法正确形成最终的 HTML。
例如:
public static void CreateMessageWithMultipleViews(string server, string recipients)
// Create a message and set up the recipients.
MailMessage message = new MailMessage("jane@contoso.com","joe@contoso.com");
// 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..]
所以我的问题是,如何使用 MailMessage 正确设置电子邮件的 HTML 源代码,使其格式正确?我在 MailMessage 类中看到了一个 'Header' 属性,但那是用于邮件标题,而不是 HTML 标题。我是否需要将 CSS 代码放在其他地方?
【问题讨论】:
【参考方案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 客户端中正确呈现。
【讨论】:
以上是关于如何在 MailMessage 中正确添加 CSS的主要内容,如果未能解决你的问题,请参考以下文章
MailMessage c# - 如何使其成为 HTML 并添加图像等?
MailMessage c# - 如何使其成为 HTML 并添加图像等?
Laravel 5.3 将 html 添加到 MailMessage->line
MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符