尝试使用PHP邮件程序发送响应式电子邮件

时间:2016-09-01 08:01:54

标签: php phpmailer

我在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>';
}

1 个答案:

答案 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,但效率低且容易 做错了。

使用输出缓冲是最简单的,但如果您想要更多的灵活性和控制,请使用SmartyTwig等模板语言。

对于与Zurb合作,你真的需要一个CSS内联器,例如emogrifier来对你渲染的模板进行后处理,否则gmail和其他低质量邮件客户端就会崩溃。

仅供参考,这个堆栈--Zurb模板,Smarty,emogrifier,PHPMailer - 正是我构建的smartmessages.net中使用的。