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> 

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

     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 обрабатывает внутри функции, область выполнения файла шаблона PHP ( /emails/event.php ) находится в области этой функции (без каких-либо переменных, доступных сразу, кроме супер-глобалов

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

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

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

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

    Шаблон маркера

     <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; в $var1 = 'Value 1'; $var2 = 'Value 2'; ob_start(); include('path/to/template.php'); $content = ob_get_clean(); $mail->Body = $content; 

    Вы можете поместить переменные в 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 } 

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

    Используя метод маркеров prodigitalson, для меня работало следующее. PHP-код:

     $e = "gsmith@gmail.com"; $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 в моем случае – (последний не работал вообще).