【问题标题】:Sending HTML page in email via PHP通过 PHP 在电子邮件中发送 HTML 页面
【发布时间】: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。
  • 我猜你的意思是你想作为附件发送?别。您的电子邮件将被每个垃圾邮件过滤器接收。
  • 我正在使用相对路径,目前我不能使用绝对路径,是的,我正在考虑附加图像..

标签: php html css email


【解决方案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 样式表?"
    • 因为我使用的是相对路径,目前我不能使用绝对路径
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多