通过PHP发送包含CSS样式表的HTML电子邮件

16

我想发送一个包含CSS样式表的HTML页面到一个电子邮件账户。问题是CSS样式表根本不可见。我是否需要将每个CSS样式都内联?这似乎是高度低效的方法。还有其他的想法吗?

以下是发送电子邮件的PHP代码:

<?php
$to = "myaccount@gmail.com";

// subject
$subject = "Test mail";

// message
$message = file_get_contents("index.html");

// from
$from = "myaccount@gmail.com";

// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= "From:" . $from;

// Mail it
mail($to,$subject,$message,$headers);

echo "Mail Sent.";
?>

我非常感激你的帮助。提前致谢。


13
是的,你需要使用内联CSS。大多数电子邮件服务(特别是Google)会删除外部CSS。 - Funk Forty Niner
10
在编写电子邮件的HTML时,请想象1996年的互联网。 - MackieeE
1
在发送电子邮件之前,您可以在技术上重新呈现它。只需加载HTML文档,创建<script></script>标签,并获取CSS文件的内容并将其放置在其中。这将产生相同的结果,但应该比重新编写所有电子邮件更快,更容易和更通用。 :S - Viridis
@KennyThompson 嗯,有些是哈哈 ;) - MackieeE
1
以下是一些CSS内联工具,可以帮助缓解您的痛苦。 - John
显示剩余4条评论
4个回答

3

谷歌、Outlook、雅虎等主要电子邮件服务提供商都不允许使用CSS外部文件。他们选择内联样式和表格来呈现带有任何样式的电子邮件消息可能听起来有些老旧,但这是为了确保安全性。

编写代码可能会很繁琐,但像https://litmus.com/和envato这样的公司可以帮助解决一些模板和格式问题。

我的建议:电子邮件提供商不能信任所有发送的信息来源,因此采用这种方式可以防止恶意代码攻击。


2

最好将所有CSS放在一个<style>块中,并将其放置在index.html的body中的某个位置。有些电子邮件客户端/门户网站会剪切头部内嵌的所有CSS,使用<link rel="stylesheet" type="text/css" href="..." >可能会导致您的电子邮件出现“损坏”,或者在带有@gmail.com的帐户上看起来很糟糕。


1
在您的index.html文件中,如下包含一个<style>标签。
<style>
.class{
style: attribute; 
}
</style>";

如果那样行不通,我建议将您的样式表托管在一个网站上,并在索引文件的头部包含类似下面的<link>标签。
<link rel='stylesheet' type='text/css' href='http://www.yourstylesheet.com'>";

任何一种方法都可以帮助解决您的问题。

这个在使用 jQuery 和 js 库的代码中是否也能起作用? - Imnotapotato

0
只需将CSS代码嵌入到HTML电子邮件的标签中即可。

3
建议使用内联CSS,因为并非所有邮件客户端都支持在<head>中的CSS。 - rybo111
如果我使用bootstrap,那么我该如何添加CSS?或者我是否应该将所有的CSS以内联格式添加? - Karthi
是的,请将其内联添加。 - Roman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接