2017-03-05 90 views
3

我試圖通過PHP郵件()函數發送HTML內容。我不知道我的代碼有什麼問題。我嘗試了很多方法,花了數小時。但沒有任何成果。有誰能告訴我我的代碼有什麼問題嗎?PHP郵件()函數不發送HTML

<?php 
$to = "[email protected]"; 
$today = date("Y/m/d"); 
$today = $today." 00:00"; 
$count_cash_inc = mysql_query("SELECT sum(income) as inc, sum(expense) as exp FROM journal_entry WHERE `date` >= '$today'"); 
$inc = mysql_fetch_array($count_cash_inc); 
$income_c = $inc['inc']; 
$epense_c = $inc['exp']; 
$counter_cash = $income_c - $epense_c; 
$subject = "Daily Report From Sri Sankalpa"; 
$headers = "From: [email protected]\r\n"; 
$headers .= "Reply-To: [email protected]\r\n"; 
$headers .= "CC: [email protected]\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 
$message = '<center><h1>Sri Sankalpa Daily Journal Report</h1>'; 
$message .= '<br><table><tr><td>Date</td><td>Total Income</td><td>Total Expense</td><td>Balance</td></tr>'; 
$message .= '<tr><td>'.date("d-m-Y").'</td><td>'.$income_c.'</td><td>'.$epense_c.'</td><td>'.$counter_cash.'</td></tr></table><br>'; 
$message .= '<p>To Know More... Please Click <strong><a target="_blank" href="http://srisankalpa.com/demo/journal_entry.php">HERE</a></strong></p></center>'; 
mail($to, $subject, $message, $headers); 
?> 

我試圖消除\ R,\ r \ n和改變字符集= UTF-8字符集來= ISO-8859-1。但沒有任何工作。尋找您的幫助。郵件以純文本形式發送完全沒有下面的行

$headers .= "Content-Type: text/html; charset=UTF-8\r\n"; 
+1

使用[PHPmailer](http://phpmailer.worxware.com/)比簡單的'mail()更高級,並且容易追蹤錯誤 –

+0

郵件可能被髮送,但gmail刪除它(垃圾郵件)。爲了防止它只是使用phpmailer –

+0

添加此標頭'$頭。='內容類型:文本/ HTML; charset = iso-8859-1'。 「\ r \ n」;'見 –

回答

1

請停止使用php mail()函數!使用PHPMailer並通過SMTP發送電子郵件。

$mail->IsHTML(true);  // <=== call IsHTML() after $mail->Body has been set. 

例:

<?php 
require("class.phpmailer.php"); 
$mail = new PHPMailer();$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->Host = "smtp1.example.com;smtp2.example.com"; 
$mail->SMTPAuth = true; 
$mail->Username = 'smtpusername'; 
$mail->Password = 'smtppassword'; 

$mail->From="[email protected]"; 
$mail->FromName="My site's mailer"; 
$mail->Sender="[email protected]"; 
$mail->AddReplyTo("[email protected]", "Replies for my site"); 

$mail->AddAddress("[email protected]"); 
$mail->Subject = "Test 1"; 

$mail->IsHTML(true); 
$mail->Body = "<h1>Test 1 of PHPMailer html</h1><img src="http://wallpaper-gallery.net/images/ball/ball-17.jpg" style="width:220px; height:59px; margin-bottom:15px"><p>This is a test</p>"; 
$mail->AltBody="This is text only alternative body."; 

if(!$mail->Send()) 
{ 
    echo "Error sending: " . $mail->ErrorInfo;; 
} 
else 
{ 
    echo "Letter is sent"; 
} 
?> 
+0

不相關的東西OP問.. –

+1

更好的辦法 –

+0

導演OP首先你要解決那麼問題表明什麼都 –

4

我有我的在線服務器上運行腳本,它似乎做工精細,雖然我不包括你的SQL查詢和變量。

可能有很多原因,爲什麼你的電子郵件沒有被髮送。沒有設立

本地主機的郵件服務器如果您正在運行在本地主機這個腳本,mail將最有可能還不如你沒有一個郵件服務器架設在本地主機的工作。閱讀this answer on setting up a mail server on your localhost (XAMPP)

檢查服務器日誌

有你的服務器日誌來看看對於可能拿出嘗試發送郵件的任何錯誤。日誌文件通常可以在logs文件夾或類似文件夾中的服務器的根目錄中找到。 This answer will help you identify the mail logs location

郵件被主機阻止

請與您的主人聯繫。根據您的主持人,他們可能會或可能不會阻止傳出的電子郵件。很多人使用PHP的mail的意圖不好,所以一些主機可能會簡單地禁用它。他們寧願你使用SMTP服務器。

您的郵件可能被標記爲垃圾郵件

檢查您的垃圾郵件文件夾。 Gmail不是通過mail發送電子郵件的粉絲,而且很可能會將您的電子郵件置於垃圾郵件文件夾中。

重複換行符在你的頭字符串

在某些情況下,使用\n\r可能導致你的頭字符串重複換行符。改爲使用\r\n

字符編碼

嘗試切換從$headers .= "Content-Type: text/html; charset=UTF-8\r\n";$headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";

更好的選擇PHP的mail();

爲了發送郵件的本地主機,你會使用類似PHPMailer會更好。這將允許您通過SMTP服務器發送郵件。有一個方便的教程here

+0

我在共享主機上運行。 – SHAKTHI

+0

有可能您的主機不允許發送來自'mail'的郵件 –

+0

哦,讓我檢查一下Hosting支持團隊。但是,正如我所提到的,沒有這一行 $ headers。=「Content-Type:text/html; charset = UTF-8 \ r \ n」; mail()函數可以正常工作。 – SHAKTHI