【问题标题】:PHP file_get_contents with mixed media (html/images)PHP file_get_contents 与混合媒体 (html/images)
【发布时间】:2016-08-09 17:32:03
【问题描述】:

我正在开发一个包含 html 电子邮件模板的项目。如果您直接查看内容并且一切正常,则基本上可以在浏览器中看到内容。它主要包含带有徽标的文本。

在我的 PHP 中,我试图获取这个 HTML 模板的内容并将其作为我的 HTML 电子邮件发送。

除了图片,一切都在进行中:

<?php 

// vars
$subject = 'Test Email Subject';
$body = file_get_contents("communication.php");

// Email
$objEmail = new SendMail;
$objEmail
   -> setFrom('noreply@domain.com')
   -> setTo('user@domain.com')
   -> setSubject($subject)
   -> sendHTMLEmail($body);

?>

它本身的 HTML 只是一个基本的 div,带有一个 img 标记,其中包含图像的完整路径。

我假设file_get_contents 只是获取代码并且不会下载任何内容。

是否有任何原因无法直接链接到图像,或者是否需要以某种方式将它们编码到电子邮件中?

【问题讨论】:

  • file_get_contents 将文件作为文本文件读取。这意味着它将读取 php 文件的源代码,而不是解析它的内容和输出。
  • @JonathanKuhn - 是否有 PHP 函数可以处理此问题,或者图像是否需要以不同方式编码?
  • 有几种方法可以让它工作。我会根据文件的内容保持警惕。作为“快速修复”,您可以开始输出缓冲,包含文件,然后将输出捕获到您的 body 变量。看看ob_startob_get_clean

标签: php html email file-get-contents


【解决方案1】:

我想communication.php 是你的模板,你使用PHP,因为你里面有一些变量。

基本上你不应该对 .php 文件执行 file_get_contents,因为内容将是文件的源代码。

你有 3 个解决方案

1 / 第一个是使用自定义变量构建一个 template.html(无论扩展名是什么)。您可以决定如何编写变量##firstname## {{lastname}} ...

当你拥有你的身体时,你会应用一些替代品

$tpl = file_get_contents("template.html");
$search = array('##lastname##');
$replace = array($lastname);
$body = str_replace($search, $replace, $tpl);

2/ 第二个是最好的。根据邮件程序,您可以拥有插件。您可以使用其装饰器插件查看 swiftmailer http://swiftmailer.org/docs/plugins.html#decorator-plugin

3/ 使用 twig 之类的模板引擎,并使用 ob_start、ob_flush 将输出捕获到缓冲区中

【讨论】:

  • 这似乎有帮助。我将不得不想出一种方法来创建一个包含所有替换的数组,以便我可以一次性完成所有操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2018-06-17
  • 2013-11-04
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2015-09-08
相关资源
最近更新 更多