PHP邮件函数不发送HTML

4

我正在尝试通过PHP mail()函数发送HTML内容。 我不知道我的代码有什么问题。 我尝试了很多方法,花费了几个小时,但是没有成功。 请问有人能告诉我我的代码有什么问题吗?

<?php 
$to = "shakthik92@gmail.com";
$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: info@srisankalpa.com\r\n";
$headers .= "Reply-To: info@srisankalpa.com\r\n";
$headers .= "CC: admin@srisankalpa.com\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 和将 charset=UTF-8 更改为 charset=iso-8859-1。但是都没有起作用。期待您的帮助。邮件发送完全是纯文本,不包含下面这行。

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

1
使用PHPmailer,它比简单的mail()更先进,易于跟踪错误。 - Abdulla Nilam
邮件可能已发送,但 Gmail 将其删除(垃圾邮件)。为了防止这种情况发生,请使用 phpmailer。 - Luca Jung
请添加以下标题 $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 并查看结果。 - Abdulla Nilam
@AbdullaNilam 不,它不起作用。 - SHAKTHI
@LucaJung 不要登录垃圾邮件... - SHAKTHI
@SHAKTHI 我知道,我也遇到了同样的问题。尝试使用另一个电子邮件地址以确保。但是,如果您在本地主机上运行脚本,请查看Nick的答案。 - Luca Jung
1个回答

4

我已经在我的在线服务器上运行了你的脚本,看起来一切都很正常,但是我没有包括你的SQL查询和变量。

你的邮件发送不成功可能有很多原因:

本地邮件服务器未设置

如果你在本地主机上运行这个脚本,mail 很可能无法工作,因为你的本地主机没有设置邮件服务器。请参阅 此答案以设置本地主机(XAMPP)上的邮件服务器

检查服务器日志

请在服务器日志中查找是否存在任何错误信息。日志文件通常可以在服务器的根目录中的 logs 文件夹或类似位置中找到。 此答案将帮助您确定邮件日志的位置

邮件被主机阻止

请向您的主机咨询。根据您的托管提供商,他们可能会或不会阻止传出电子邮件。许多人使用 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 服务器发送邮件。这里有一个方便的教程 (点击此处)


我正在共享主机上运行。 - SHAKTHI
您的主机可能不允许从 mail 发送邮件。 - Nick Duncan
哦,让我向托管支持团队确认一下。但是,正如我所提到的,如果没有这一行 $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; mail() 函数作为纯文本工作得很好。 - SHAKTHI
我在我的服务器上运行了你的代码(除了SQL查询),它可以正常工作并包含HTML头行。 - Nick Duncan
谢谢你的帮助。看来这是托管服务器的问题。我会和他们联系确认一下。再次感谢@Nick Duncan。 - SHAKTHI
我已经更新了我的答案,并附上了几个其他的替代方案。 - Nick Duncan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接