PHP邮件()函数不发送HTML

问题描述:

我试图通过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”;'见 –

请停止使用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首先你要解决那么问题表明什么都 –

我有我的在线服务器上运行脚本,它似乎做工精细,虽然我不包括你的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