2016-09-01 221 views
-1

我有一個PHP文件中的響應電子郵件模板,並試圖用PHP郵件發送它沒有成功。我的代碼看起來像這樣。嘗試使用PHP郵件發送響應電子郵件

$m = new PHPMailer; 
$m ->isSMTP(); 
$m->SMTPAuth=true; 

// debugging 
// $m->SMTODebug=1 
// endof debug 
$m->Host="smtp.gmail.com"; 
$m->Username="[email protected]"; 
$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

你是什麼意思的響應電子郵件模板?如果電子郵件中包含Javascript,大多數郵件閱讀器將忽略JS。 – Barmar

+0

你有任何可以分享的錯誤嗎?本能地說,我會說你沒有在你的服務器上安裝任何MTA(郵件傳輸代理),但我可能完全錯誤。 – krtek

+0

如果您使用的是Gmail,則可能需要允許登錄才能使用安全性較低的應用,如https://support.google.com/accounts/answer/6010255中所述。 –

回答

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所創建的。

+0

謝謝,OB完美工作.. –

+0

很高興工作,請標記我的答案是正確的 - 點擊打勾! – Synchro