在php中加载html邮件文件

时间:2012-07-24 18:39:24

标签: php html email

我在html文件中实现了一个html电子邮件。我有一个php文件,它使用PHPMailer类来发送电子邮件。 我想要实现的是,我在html中有一些应该更改的文本取决于我发送电子邮件的人。

这是发送电子邮件的php文件

<?php
    // get variables
    $contact_name = addslashes($_GET['contact_name']);
    $contact_phone = addslashes($_GET['contact_phone']);
    $contact_email = addslashes($_GET['contact_email']);
    $contact_message = addslashes($_GET['contact_message']);

    // send mail
    require("class.phpmailer.php");
    $mailer = new PHPMailer();
    $mailer->IsSMTP();
    $mailer->Host = 'ssl://smtp.gmail.com:465';
    $mailer->SMTPAuth = TRUE;
    $mailer->Username = 'danyel.p@gmail.com';
    $mailer->Password = 'mypass';
    $mailer->From = 'contact_email';
    $mailer->FromName = 'PS Contact';
    $mailer->Subject = $contact_name;
    $mailer->AddAddress('pdaniel@gmail.com');
    $mailer->Body = $contact_message;
    if($mailer->Send())
        echo 'ok';
?>

html文件包含一个简单的html邮件,用表格和所需的所有标准实现。

我想要比我更勇敢的思想,这是实现这一目标的最佳方法。 :)

提前谢谢你, 丹尼尔!

编辑:现在,在$ mailer-&gt; Body我有$ contact_message变量作为文本电子邮件..但我希望在该主体中加载包含html电子邮件的html文件,我想以某种方式更改html电子邮件的正文,其中包含此$ contact_message变量中的文本。

4 个答案:

答案 0 :(得分:1)

一种简单的方法是在html文件中使用特殊标记,这些标记将被调用者替换。例如,假设您有两个可能动态更改内容的变量,namesurname然后在您的html中添加类似的内容:%%NAME%%%%SURNAME%%然后在调用中脚本简单:

$html = str_replace("%%NAME%%", $name, $html);
$html = str_replace("%%SURNAME%%", $surname, $html);

或嵌套上面两个:

$html = str_replace("%%NAME%%", $name, str_replace("%%SURNAME%%", $surname, $html));



修改 如果您有许多变量,这是一个更优雅的解决方案:定义一个关联数组,用于保存替换

$myReplacements = array ( "%%NAME%%"    => $name,
                          "%%SURNAME%%" => $surname
);

并使用循环来实现:

foreach ($myReplacements as $needle => $replacement)
   $html = str_replace($needle, $replacement, $html);

答案 1 :(得分:0)

根据您要查看的电子邮件创建条件语句。 然后在tempalted php html电子邮件文本中包含它。

您还可以将更改的值传递给将实现上述功能的函数。

答案 2 :(得分:0)

如果我建立一个网站,我通常使用模板引擎,像Smarty ......你可以在一个聪明的模板文件中编写你的html邮件。然后,您可以自动根据条件添加想要的文本。只需将正确的值分配给模板引擎即可。

答案 3 :(得分:0)

回答你的编辑:

function renderHtmlEmail($body) {
    ob_start();
    include ('my_html_email.php');
    return ob_get_clean();
}

my_html_email.php文件中,您会有类似的内容:

<html>
    <body>
        <p>....<p>
        <!-- the body -->
        <?php echo $body; ?>
    </body>
</html>

 $mailer->Body = renderHtmlEmail($contact_message);

如果您需要将其他变量传递给布局/模板文件,请将params添加到该方法,或者传递一个关联数组,如function renderHtmlEmail($viewVars)和函数extract($viewVars);

然后,您将能够在模板中使用这些变量,例如。 Dear <?php echo $to; ?>,

如果不是.html,您可能需要将html文件从.html更改为.php。

也就是说,如果我正确理解了这个问题。