Подтвердить что ты не робот

Php-mailer и html включают в себя переменные php

Привет, я пытаюсь отправить html-письма, используя php-почтовый класс. Проблема в том, что я хотел бы включить PHP-переменные в мой адрес электронной почты, а использование включает в себя, чтобы держать вещи организованными. Heres my php mailer....

 $place = $data['place'];
 $start_time = $data['start_time'];

$mail->IsHTML(true);    // set email format to HTML
$mail->Subject = "You have an event today";
$mail->Body = file_get_contents('../emails/event.html');
$mail->Send(); // send message

Мой вопрос: возможно ли иметь php-переменные в event.html? Я пробовал это без везения (ниже event.html)..

<table width='600px' cellpadding='0' cellspacing='0'>
<tr><td bgcolor='#eeeeee'><img src='logo.png' /></td></tr>
<tr><td bgcolor='#ffffff'  bordercolor='#eeeeee'>
<div style='border:1px solid #eeeeee;font-family:Segoe UI,Tahoma,Verdana,Arial,sans-serif;padding:20px 10px;'>
<p style=''>This email is to remind you that you have an upcoming meeting at $place on $start_time.</p>
<p>Thanks</p>
</div>
</td></tr>
</table>
4b9b3361

Ответ 1

Да, очень легко с include и короткой вспомогательной функцией:

function get_include_contents($filename, $variablesToMakeLocal) {
    extract($variablesToMakeLocal);
    if (is_file($filename)) {
        ob_start();
        include $filename;
        return ob_get_clean();
    }
    return false;
}

$mail->IsHTML(true);    // set email format to HTML
$mail->Subject = "You have an event today";
$mail->Body = get_include_contents('../emails/event.php', $data); // HTML -> PHP!
$mail->Send(); // send message
  • Функция get_include_contents любезно предоставлена ​​PHP include документацией, слегка измененной для включения массива переменных.

  • Важно:. Поскольку ваш include обрабатывает внутри функции, область выполнения файла шаблона PHP (/emails/event.php) находится в этой области действия (без переменных, доступных сразу, кроме супер-глобалы

  • Вот почему я добавил extract($variablesToMakeLocal) — он извлекает все ключи массива из $variablesToMakeLocal в качестве переменных в области функций, что, в свою очередь, означает, что они находятся в пределах объема включенного файла.

    Поскольку у вас уже были place и start_time в массиве $data, я просто передал это прямо в функцию. Возможно, вам захочется знать, что все ключи будут извлечены в $data — вы можете или не захотите этого.

  • Обратите внимание, что теперь ваш файл шаблона обрабатывается как файл PHP, поэтому применяются все те же оговорки и правила синтаксиса. Вы не должны подвергать его редактированию внешним миром, и вы должны использовать <?php echo $place ?> для вывода переменных, как в любом файле PHP.

Ответ 2

Пара способов сделать это:

Temken Template

<p> Some cool text %var1%,, %var2%,etc...</p>

Token Mailer

$mail->Body = strtr(file_get_contents('path/to/template.html'), array('%var1%' => 'Value 1', '%var2%' => 'Value 2'));

Шаблон буфера

<p> Some cool text $var1,, $var2,etc...</p>

Буферная почта

$var1 = 'Value 1';
$var2 = 'Value 2';
ob_start();
include('path/to/template.php');
$content = ob_get_clean();
$mail->Body = $content;

Ответ 3

Вы можете поместить переменные в html-адрес электронной почты, а затем сделать string_replace, чтобы содержимое отображалось в письме вместо переменных:

try {
    $mail = new PHPMailer(true);
    $body = file_get_contents('phpmailer/subdir/contents.html');
    $body = str_replace('$fullname', $fullname, $body);
    $body = str_replace('$title', $title, $body);
    $body = str_replace('$email', $email, $body);
    $body = str_replace('$company', $company, $body);
    $body = str_replace('$address', $address, $body);
    // strip backslashes
    $body = preg_replace('/\\\\/','', $body);
    // mail settings below including these:
    $mail->MsgHTML($body);
    $mail->IsHTML(true); // send as HTML
    $mail->CharSet="utf-8"; // use utf-8 character encoding
}

Это настройка, которая работала для меня. Возможно, это не СУХОЙ, но он работает.

Ответ 4

Используя метод todigitalson token, для меня это работало. PHP-код:

$e = "[email protected]";
$sc = "2sbd2152g#!fsf";
$body = file_get_contents("../email/recovery_email.html");
$body  = eregi_replace("%e%" ,$sc, $body);
$body  = eregi_replace("%sc%" ,$sc, $body);
$mail->MsgHTML($body);

HTML был просто:

<p>Click this link: www.mysite.com/recover.php?e=%e%&sc=%sc%<p>

eregi_replace работал лучше, чем strtr в моем случае - (последний не работал вообще).