我必须构建一个HTML电子邮件。电子邮件将从我的数据库中提取数据,用HTML代码填写电子邮件以向用户显示数据,使用链接按钮将GET请求发送到PHP页面,该页面将根据用户的选择做出反应(哪个按钮他们压)。
现在我已经可以发送HTML电子邮件了。但是,这个特定的电子邮件会更大,包含CSS(但没有javascript)等。
我不想手工构建一个巨大的HTML字符串......它完全无法调试。我想做的是将我的PHP文件的结果转换为字符串并将其用作电子邮件正文。我确信它可以做到,但在网络开发方面,我还是一个相对初学者。
我的代码会使这个帖子太长,但让我们以这样的方式作为例子:
emailSource.php :
<?php
include_once "init.php";
?>
<html>
<body>
<span>One-Two, </span>
<?php
echo "testing";
?>
</body>
</html>
当我尝试发送电子邮件时,我希望能够执行以下操作:
sendMail("my subject", emailSource.php?myparam=42, "myEmail@myDomain.com");
^^^^^^^^^^^^^^^^^^^^^^^^^^
现在这种语法显然无效,但这应该有助于您了解我尝试做的事情。
谢谢,
Mathieu Turcotte
答案 0 :(得分:3)
如果您尝试将视图(html)和逻辑代码(php)分开,可以创建模板并查看函数/类以包含它们,例如:
template.php:
<html>
<body>
Hello, <?= $this->get('name'); ?>.
<?php if $this->has('date') : ?>
Year : <?= $this->get('date')->format('Y'); ?>
<?php endif; ?>
</body>
</html>
view.php:
class View extends ArrayObject {
public function get(string $id)
{
return $this->offsetGet($id);
}
public function set(string $id,$value): void
{
$this->offsetSet($id,$value);
}
public function has(string $id): bool
{
return $this->offsetExists($id);
}
public function remove(string $id): void
{
$this->offsetUnset($id);
}
public function render(string $template): string
{
ob_start();
require $template;
return ob_get_clean();
}
}
用法:
require_once('view.php');
$view = new View();
$view->set('name','AzJezz');
$view->set('date',new DateTime());
$html = $view->render('template.php');
sendMail('Subject !',$html,'someone@gmail.com');
答案 1 :(得分:2)
按照你的要求,你可以使用输出缓冲:
<?php
//start buffering output (Everything that was supposed to go to the browser is instead stored)
ob_start();
?>
<html>
<!-- write lots of HTML, including some data from db -->
<div><?php echo $data; ?></div>
</html>
<?php
//get the data that was buffered
$big_html_message = ob_get_clean();
mail($to, $subject, $big_html_message);
答案 2 :(得分:-1)
如果您将emailSource.php
作为单独的HTTP请求请求,则这很简单:
sendMail(
"my subject",
file_get_contents( 'http://example.com/emailSource.php?myparam=42' ),
"myEmail@myDomain.com"
);