如何使用模板或动态内容进行php电子邮件发送

时间:2016-08-29 02:15:48

标签: php email mailer

PHPMailer也是发送电子邮件和mail()函数的好选择,但问题是为电子邮件正文生成动态内容,并且主题不是最好的。

例如我创建了一个带有正文模板的php文件或一个具有相同功能的类,但是很难维护。

您对组织该代码有何建议?

有没有办法创建电子邮件模板? (像树枝)。 你如何组织文件夹和文件? 那有什么文件推荐吗? 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

与您在PHP中已经用于生成动态HTML的内容没有什么不同。除了不是通过您的Web服务器将生成的HTML输出发送到客户端UA,您将通过MTA将其发送到电子邮件UA。

20年前,有人想要创造一个好的模板引擎来生成动态内容(它被称为PHP)。事实证明它今天仍然非常有用。

假设您的电子邮件中有一个类似于此的模板文件。

<table>
    <?php foreach($rows as $row) { ?>
    <tr>
        <?php foreach($row as $column) { ?>
        <td><?=$column?></td>
        <?php } ?>
    </tr>
    <?php } ?>
</table>

假设有一些模板系统可以将这些模板渲染成这样的东西。

class Template {
    protected $templateFile = "";
    protected $templateVars = [];
    public function __construct($templateFile, Array $templateVars= []) {
        $this->templateVars = $templateVars;
        $this->templateFile = $templateFile;
    }
    public function __toString() {
        export($this->templateVars, EXTR_SKIP);
        ob_start();
        include $this->templateFile;
        return ob_get_clean();
    }
}

现在,您可以进一步扩展这个非常简单的模板抽象,以包含诸如电子邮件主题行,发件人电子邮件地址等内容......

class SendEmail {
    public function __construct($to, $subject, $template, Array $data) {
        $template = new Template($file, $data); // create the email template
        $this->emailBody = (string) $template; // generate the content
        $this->to = $to;
        $this->subject = $subject;
    }
    public function send() {
        // Send email using PHP mailer or whatever here
    }
}

答案 1 :(得分:-1)

$tempalteContent = mysqli_query($conn, "select * from newsletter_template where name like '%$template%'");
if (mysqli_num_rows($tempalteContent) > 0) {
    $validate = 0;
    $messageFinal = '';
    $message = '';
    $row = mysqli_fetch_array($tempalteContent);
    $template_id = $row['id'];
    $productInc = $row['productsInc'];
    $blogInc = $row['blogInc'];
    $templateMsg = htmlspecialchars_decode($row['description']);
    $divData = '';
    $blogData = '';
    if ($blogInc == 1 && $productInc == 1) {

        /*         * Product Query* */
        $productQuery = mysqli_query($conn, "select * from newsletter_products where newsletter_tempalte_id = $template_id");
        if (mysqli_num_rows($productQuery) > 0) {

            $width = '';
            $website = "http://demo.com/";
            if (mysqli_num_rows($productQuery) > 2) {
                $width = '100%';
            } else if (mysqli_num_rows($productQuery) > 1) {
                $width = '100%';
            }
            for ($i = 0; $i <= mysqli_num_rows($productQuery); $i++) {
                $row[$i] = mysqli_fetch_array($productQuery);
                $product_id[$i] = $row[$i]['product_id'];
                $productDetails[$i] = mysqli_query($conn, "select * from products where product_id = $product_id[$i]");
                if (mysqli_num_rows($productDetails[$i]) > 0) {
                    $rowproduct[$i] = mysqli_fetch_array($productDetails[$i]);
                    $productName[$i] = $rowproduct[$i]['product_name'];
                    $productImg[$i] = $website . $rowproduct[$i]['product_img'];
                    $productDesp[$i] = htmlspecialchars_decode($rowproduct[$i]['product_desp']);
                    $divData .= "<div style='width:" . $width . ";float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $productImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $productName[$i] . "</b><span style='font-size:12px;'>" . $productDesp[$i] . "</span></div>";
                }
                $validate++;
            }
        }

        /*         * Blog Query* */

        $blogQuery = mysqli_query($conn, "select * from newsletter_blogs where newsletter_template_id = $template_id");
        if (mysqli_num_rows($blogQuery) > 0) {

            $width = '';
            $website = "http://demo.com/";
            if (mysqli_num_rows($blogQuery) > 2) {
                $width = '100%';
            } else if (mysqli_num_rows($blogQuery) > 1) {
                $width = '100%';
            }
            for ($i = 0; $i <= mysqli_num_rows($blogQuery); $i++) {
                $row[$i] = mysqli_fetch_array($blogQuery);
                $blog_id[$i] = $row[$i]['blog_id'];
                $blogDetails[$i] = mysqli_query($conn, "select * from blog where id = $blog_id[$i]");
                if (mysqli_num_rows($blogDetails[$i]) > 0) {
                    $rowblog[$i] = mysqli_fetch_array($blogDetails[$i]);
                    $blogName[$i] = $rowblog[$i]['title'];
                    $blogImg[$i] = $website . $rowblog[$i]['img'];
                    $blogDesp[$i] = htmlspecialchars_decode($rowblog[$i]['desp']);
                    $blogData .= "<div style='width:100%;float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $blogImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $blogName[$i] . "</b><span style='font-size:12px;'>" . $blogDesp[$i] . "</span></div>";
                }
                $validate++;
            }
        }
        $message = $templateMsg . $divData . $blogData;
    } else if ($productInc == 1 && $blogInc == 0) {
        $productQuery = mysqli_query($conn, "select * from newsletter_products where newsletter_tempalte_id = $template_id");
        if (mysqli_num_rows($productQuery) > 0) {

            $width = '';
            $website = "http://demo.com/";
            if (mysqli_num_rows($productQuery) > 2) {
                $width = '100%';
            } else if (mysqli_num_rows($productQuery) > 1) {
                $width = '100%';
            }
            for ($i = 0; $i <= mysqli_num_rows($productQuery); $i++) {
                $row[$i] = mysqli_fetch_array($productQuery);
                $product_id[$i] = $row[$i]['product_id'];
                $productDetails[$i] = mysqli_query($conn, "select * from products where product_id = $product_id[$i]");
                if (mysqli_num_rows($productDetails[$i]) > 0) {
                    $rowproduct[$i] = mysqli_fetch_array($productDetails[$i]);
                    $productName[$i] = $rowproduct[$i]['product_name'];
                    $productImg[$i] = $website . $rowproduct[$i]['product_img'];
                    $productDesp[$i] = htmlspecialchars_decode($rowproduct[$i]['product_desp']);
                    $divData .= "<div style='width:" . $width . ";float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $productImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $productName[$i] . "</b><span style='font-size:12px;'>" . $productDesp[$i] . "</span></div>";
                }
                $validate++;
            }
        }
        $message = $templateMsg . $divData;
    } else if ($blogInc == 1 && $productInc == 0) {
        $blogQuery = mysqli_query($conn, "select * from newsletter_blogs where newsletter_tempalte_id = $template_id");
        if (mysqli_num_rows($blogQuery) > 0) {

            $width = '';
            $website = "http://demo.com/";
            if (mysqli_num_rows($blogQuery) > 2) {
                $width = '100%';
            } else if (mysqli_num_rows($blogQuery) > 1) {
                $width = '100%';
            }
            for ($i = 0; $i <= mysqli_num_rows($blogQuery); $i++) {
                $row[$i] = mysqli_fetch_array($blogQuery);
                $blog_id[$i] = $row[$i]['blog_id'];
                $blogDetails[$i] = mysqli_query($conn, "select * from blog where id = $blog_id[$i]");
                if (mysqli_num_rows($blogDetails[$i]) > 0) {
                    $rowblog[$i] = mysqli_fetch_array($blogDetails[$i]);
                    $blogName[$i] = $rowblog[$i]['title'];
                    $blogImg[$i] = $website . $rowblog[$i]['img'];
                    $blogDesp[$i] = htmlspecialchars_decode($rowblog[$i]['desp']);
                    $blogData .= "<div style='width:100%;float:left;padding:7px;text-align:justify'><span style='width:100%;padding-bottom:5px;float:left'><img src='" . $blogImg[$i] . "' width='30%' height='30%' style='max-width:100px;max-height:100px'></span><b style='vertical-align:bottom'>" . $blogName[$i] . "</b><span style='font-size:12px;'>" . $blogDesp[$i] . "</span></div>";
                }
                $validate++;
            }
        }
        $message = $templateMsg . $blogData;
    } else {
        $message = $templateMsg;
    }
    $messageFinal = '<div style="width:100%">' . $message . '</div>';
    echo $validate;
} else {
    echo "Fail";
    exit();
}
$subscribers = explode(',', $_POST['subscribers']);
for ($i = 0; $i < count($subscribers); $i++) {
    $to = $subscribers[$i];
    $subject = $template;
    $from = 'demo@demo.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";

    // Create email headers
    $headers .= 'From: Demo' . "\r\n" .
            'Reply-To: Your Email Id' . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

    // Compose a simple HTML email message
    $message = '<!DOCTYPE html><html><body>';
    $message .= $messageFinal . $footer;
    $message .= '</body></html>';

    // Sending email
    if (mail($to, $subject, $message, $headers)) {
        $validate++;
    } else {
        $validate = 0;
    }
}