如何发送HTML / CSS电子邮件?

时间:2009-07-21 15:12:33

标签: php css email xhtml

大多数电子邮件客户端在阅读HTML电子邮件(包括Gmail和Hotmail)中的CSS时遇到问题。我经常使用这项服务将我的HTML / CSS转换为正确的电子邮件格式,以便在用户端看起来一切正常。基本上它的作用是将所有CSS转换为内联样式:

http://premailer.dialect.ca/

您是否有任何其他方法可以在HTML电子邮件中发送CSS?我自动生成电子邮件,由于一些限制,我无法修改内联样式。

4 个答案:

答案 0 :(得分:7)

至于直接格式,我总是使用内联CSS样式,但是我使用SwiftMailer(http://swiftmailer.org/)来处理PHP5来处理电子邮件功能,并且它有很大的帮助。

您可以发送不同格式的多部分邮件,因此如果电子邮件客户端不喜欢HTML版本,您可以始终默认使用文本版本,这样您就知道至少有些内容正在通过清理。

在“views”文件夹中,您可以为不同的电子邮件格式设置不同的路由(我也使用smarty,因此使用.tpl扩展名)。这是典型的SwiftMailer :: sendTemplate()函数在设置模板时的样子:

 $email_templates = array('text/html' => 'email/html/' . $template . '.en.html.tpl',
                        'text/plain' => 'email/text/' . $template . '.en.txt.tpl');

foreach ($email_templates as $type => $file) {
  if ($email->template_exists($file)) {
    $message->attach(new Swift_Message_Part($email->fetch($file), $type));
  } elseif ($type == 'text/plain') {
    throw new Exception('Could not send email -- no text version was found');
  }
}

你明白了。 SwiftMailer还有许多其他好东西,包括返回“无法传递”的地址,记录传递错误以及限制大型电子邮件批次。我建议你看看。

答案 1 :(得分:6)

您需要添加一个标题,说明内容为HTML。当您使用mail()函数时,其中一个标题应为:内容类型:html / text(可能不是'确切'标题)。

让我举个例子:(来自php.net/mail页面)

// 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 .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

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

答案 2 :(得分:3)

最简单的方法是编写一个包含嵌入式CSS的html页面并将其推送到automated styling machine

答案 3 :(得分:2)

要添加到上面的示例中,(如果您不太熟悉PHP),您只需使用变量:to,subject,message和headers构建“email”

如果您想知道如何创建表单以填充和运行此PHP脚本,请告诉我,否则,您只需手动输入此文件中的所有内容,另存为PHP文件,将其放在支持的服务器上PHP,然后导航到浏览器中的文件。

以下是代码:

// Setup recipients
$to = 'johndoe@google.com' . ',' // comma separates multiple addresses
$to .= 'janedoe@msn.com';

// subject
$subject = 'PHP Email Script - Test Email';

// message (to use single quotes in the 'message' variable, supercede them with a back slash like this-->&nbsp; \'
$message = '
<html>
<head>
  <title>PHP Email Script</title>
</head>
<body>
  <p style="background: #ccc; width: 100%;">Test Email Script</p>
</body>
</html>
';


// 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 .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Send the email
mail($to, $subject, $message, $headers);