从PHP脚本的结果发送电子邮件的最佳方式

时间:2018-04-27 18:42:45

标签: php

我必须构建一个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

3 个答案:

答案 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"
);