我在php文件中有一个响应式电子邮件模板,并尝试使用PHP邮件发送它但没有成功。我的代码看起来像这样。
$m = new PHPMailer;
$m ->isSMTP();
$m->SMTPAuth=true;
// debugging
// $m->SMTODebug=1
// endof debug
$m->Host="smtp.gmail.com";
$m->Username="example@gmail.com";
$m->Password="blahblah";
$m->SMTPSecure='ssl';
$m->Port=465;
$m->isHtml(true);
$m->Subject = 'Welcome to Efie';
$m->msgHTML(file_get_contents('functions/register-email.php'), dirname(__FILE__));
$m->FromName="Contact Form Efie";
$m->AddAddress($email,$fname);
if($m->send()) {
echo '<p class="errors bg-success text-success">Email Received</p>';
}
答案 0 :(得分:2)
这与响应无关 - 这只是在Zurb CSS中使用CSS媒体查询的问题,它不需要任何javascript。
您遇到的问题是file_get_contents
字面上获取文件的内容,它不会将其作为PHP脚本运行。有几种方法可以解决这个问题。
您可以include
将文件分配给变量,如下所示:
$body = include 'functions/register-email.php';
$m->msgHTML($body, dirname(__FILE__));
这种方法的问题在于,您不能只将内容放在文件中,您需要将return
作为值,因此您的模板将类似于:
<?php
$text = <<<EOT
<html>
<body>
<h1>$headline</h1>
</body>
</html>
EOT;
return $text;
更简单的方法是使用输出缓冲,这使模板文件更简单:
ob_start();
include 'functions/register-email.php';
$body = ob_get_contents();
ob_end_clean();
$m->msgHTML($body, dirname(__FILE__));
,模板就是:
<html>
<body>
<h1><?php echo $headline; ?></h1>
</body>
</html>
无论哪种方式,模板文件都可以访问您的局部变量,插值也可以。
还有其他选项,例如使用eval
,但效率低且容易
做错了。
使用输出缓冲是最简单的,但如果您想要更多的灵活性和控制,请使用Smarty或Twig等模板语言。
对于与Zurb合作,你真的需要一个CSS内联器,例如emogrifier来对你渲染的模板进行后处理,否则gmail和其他低质量邮件客户端就会崩溃。
仅供参考,这个堆栈--Zurb模板,Smarty,emogrifier,PHPMailer - 正是我构建的smartmessages.net中使用的。