2016-07-02 08:36
浏览 431


I'm trying to get the emails sent from my contact (using PHPMailer) sent in a nice html template (phtml actually).

What works: I receive the html template so no issue with the transmission

What does not work: The variables (message, phone number, etc) are not reflected in the body of my html template. I have tried several things in the html template, without success: <?= htmlspecialchars($message) ?> and #message# and <?php echo$_POST['message'] ?>

What is the issue?


Here is the PHPMailer code:


require 'PHPMailer/PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$body = file_get_contents('htmlemail.phtml');

//Enable SMTP debugging. 
$mail->SMTPDebug = false;                               
//Set PHPMailer to use SMTP.
//Set SMTP host name                          
$mail->Host = "";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;                          
//Provide username and password     
$mail->Username = "";                 
$mail->Password = "";                           
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";                           
//Set TCP port to connect to 
$mail->Port = 587;                                   

$mail->From = $_POST['email'];
$mail->FromName = $_POST['first_name'] . " " . $_POST['last_name'];

//CC and BCC


$mail->Subject = "Nouveau message depuis ";


$response = array();
if(!$mail->send()) {
  $response = array('message'=>"Mailer Error: " . $mail->ErrorInfo, 'status'=> 0);
} else {
  $response = array('message'=>"Message has been sent successfully", 'status'=> 1);

/* send content type header */
header('Content-Type: application/json');

/* send response as json */
echo json_encode($response);

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • dongshungou7699 2016-07-02 09:24

    Using ob_start

    include 'htmlemail.php';
    $body = ob_get_clean();


    You can also use a templating method to generate the email body for multiple uses.


    In your html template, have variables assigned like this:

    Thank you {NAME} for contacting us.

    Your phone number is {PHONE}

    Then before calling your phpmailer, create an array to process the email body:

    $email_vars = array(
        'name' => $_POST['name'],
        'phone' => $_POST['phone'],

    And finally, with phpmailer...

    $body = file_get_contents('htmlemail.phtml');
        foreach($email_vars as $k=>$v){
            $body = str_replace('{'.strtoupper($k).'}', $v, $body);

    This way your emails will have all the dynamic content you need in the body.

    解决 无用
    打赏 举报
  • 查看更多回答(4条)

相关推荐 更多相似问题