1

我在一个 html 文件中实现了一个 html 电子邮件。我有一个使用PHPMailer该类发送电子邮件的 php 文件。我想要实现的是,我在 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->Body 我有 $contact_message 变量作为文本电子邮件。但我想在那个正文中加载一个包含 html 电子邮件的 html 文件,我想以某种方式更改 html 的正文使用此 $contact_message 变量中的文本发送电子邮件。

4

4 回答 4

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);
于 2012-07-24T18:53:31.840 回答
0

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

于 2012-07-24T18:47:28.603 回答
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);

function renderHtmlEmail($viewVars)如果您需要将其他变量传递给布局/模板文件,请将参数添加到该方法,或者像这样在函数内部传递关联数组extract($viewVars);

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

如果还没有,您可能必须将 html 文件从 .html 更改为 .php。

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

于 2012-07-24T19:14:06.023 回答
0

根据您要查看的电子邮件创建条件语句。然后将其包含在模板化的 php html 电子邮件文本中。

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

于 2012-07-24T18:45:24.340 回答