我正在尝试使用以下脚本将多个变量传递到电子邮件模板:
$mail = new PHPMailer;
$email = 'versace@versace.it';
$data['fname'] = $_POST['c_fname'];
$data['lname'] = $_POST['c_lname'];
$mail->setFrom('armani@armani.com', 'First Last');
$mail->addReplyTo('armani@armani.com', 'First Last');
$mail->addAddress($email, 'John Doe');
$mail->Subject = 'Your confirmation';
$mail -> msgHTML(file_get_contents('temp.php',$data), dirname(__FILE__));
$mail->AltBody = 'Thank you for contacting us';
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
redirect('index.php');
}
这是错误消息:
邮件程序错误:邮件正文空白
我做错了吗?
答案 0 :(得分:1)
邮件正文为空,因为file_get_contents
返回null。当需要布尔值时,您将数组作为第二个参数($use_include_path
)传递给它,因此它会抛出警告并返回null。
您尝试做的就是将问题中的$data
数组提取到变量中,然后通过PHP解析temp.php
这些变量。您不能使用file_get_contents
执行此操作,因为它只返回文件的内容,并且不解析文件中的任何PHP代码。您需要使用输出缓冲,包含文件,然后将输出分配给变量:
$mail = new PHPMailer;
$email = 'versace@versace.it';
$data[ 'fname' ] = $_POST[ 'c_fname' ];
$data[ 'lname' ] = $_POST[ 'c_lname' ];
$mail->setFrom( 'armani@armani.com', 'First Last' );
$mail->addReplyTo( 'armani@armani.com', 'First Last' );
$mail->addAddress( $email, 'John Doe' );
$mail->Subject = 'Your confirmation';
$mail->msgHTML( renderTemplate( 'temp.php', $data ), dirname( __FILE__ ) );
$mail->AltBody = 'Thank you for contacting us';
if ( ! $mail->send() ) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
redirect( 'index.php' );
}
function renderTemplate( $file, $data ) {
if ( ! file_exists( $file ) ) {
trigger_error( 'renderTemplate: file does not exist' );
exit;
}
extract( $data );
ob_start();
include($file);
$content = ob_get_clean();
return $content;
}
答案 1 :(得分:0)