通过 PHP 在电子邮件中发送 HTML 页面
Posted
技术标签:
【中文标题】通过 PHP 在电子邮件中发送 HTML 页面【英文标题】:Sending HTML page in email via PHP 【发布时间】:2014-01-05 00:39:51 【问题描述】:我想使用 php 在电子邮件中发送带有图片和 CSS 样式表的 html 页面。如何在不将图片上传到服务器的情况下添加图片和 CSS 样式表?
以下是发送电子邮件的 PHP 代码:
<?php
$to = "my.account@gmail.com";
// subject
$subject = "Test mail";
// message
$message = file_get_contents("index.html"); // index.html contains images and css stylesheet which are not displayin in the email
// from
$from = "my.account@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.";
?>
非常感谢您的帮助。提前致谢。
【问题讨论】:
我不认为它真的会如你所愿。大多数电子邮件客户端不会按您的意愿显示电子邮件。 如果图像不在服务器上,如何引用它?图片必须在服务器上。 对图像使用绝对路径,并且您需要放置内联样式,因为电子邮件中不支持应用 CSS。 我猜你的意思是你想作为附件发送?别。您的电子邮件将被每个垃圾邮件过滤器接收。 我正在使用相对路径,目前我不能使用绝对路径,是的,我正在考虑附加图像.. 【参考方案1】:您可以像这样添加发送 html 文件:
$file_name = basename($file); // Get file name
$data = file_get_contents($file); // Read file contents
$file_contents = chunk_split(base64_encode($data)); // Encode file data into base64
$uid = md5(time()); // Create unique boundary from timestamps
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "From: $from_name<$mail_from>";
$headers[] = "Reply-To: $mail_from";
$headers[] = "Content-Type: multipart/mixed; boundary=\"$uid\"";
$headers[] = "This is a multi-part message in MIME format.";
$headers[] = "--$uid";
$headers[] = "Content-type:text/plain; charset=iso-8859-1"; // Set message content type
$headers[] = "Content-Transfer-Encoding: 7bit";
$headers[] = $message; // Dump message
$headers[] = "--$uid";
$headers[] = "Content-Type: application/octet-stream; name=\"$file_name\""; // Set content type and file name
$headers[] = "Content-Transfer-Encoding: base64"; // Set file encoding base
$headers[] = "Content-Disposition: attachment; filename=\"$file_name\""; // Set file Disposition
$headers[] = $file_contents; // Dump file
// Send mail with header information
if (mail($mail_to, $subject, '', implode("\r\n", $headers) ))
return true;
【讨论】:
【参考方案2】:对于复杂的电子邮件,您应该使用 Mailer 类,例如美妙的 PHPMailer 类。
使用这个类可以很容易地发送复杂的邮件(比如 HTML 邮件)。您可以在 PHPMailer 的示例文件夹中找到示例。
【讨论】:
OP 要求图片引用,而不是如何发布 HTML 电子邮件。 '我想发送一个 HTML 页面' - 听起来他想发送一封带有图片的 HTML 电子邮件。 PHPMailer 是一个非常好的方法。 "如何在不将图片上传到服务器的情况下添加图片和 css 样式表?" 因为我使用的是相对路径,目前我不能使用绝对路径以上是关于通过 PHP 在电子邮件中发送 HTML 页面的主要内容,如果未能解决你的问题,请参考以下文章