如何在PHP中发送电子邮件?

时间:2016-05-18 09:35:42

标签: php email

我正在使用以下代码。没有错误,但没有收到邮件。

<?php
$msg="";

$from_add = "example@gmail.com"; 
$to_add = "example@gmail.com"; 
$subject = "Test Subject";
$message = "Test Message";
$headers = "From: $from_add \r\n";
$headers .= "Reply-To: $from_add \r\n";
$headers .= "Return-Path: $from_add\r\n";
$headers .= "X-Mailer: PHP \r\n";

if(mail($to_add,$subject,$message,$headers)) 
{
    echo $msg = "Mail sent OK";
} 
else 
{
   echo $msg = "Error sending email!";
}

 ?>

1 个答案:

答案 0 :(得分:0)

除非出现明显的语法错误,否则很难诊断脚本不发送电子邮件的原因。 所以你需要解决这个问题,如下所示找到你可能遇到的任何潜在的陷阱:
1-确保启用错误报告并设置为报告所有错误。 将以下代码放在PHP文件的顶部(或主配置文件中)将启用错误报告。

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

2-检查服务器的邮件日志。
(您可能需要询问服务器管理员他们所在的位置),但通常可以在日志下的用户根目录中找到它们。 3-检查mail()是返回true还是false。
mail()功能:

如果邮件成功接受传递,则返回TRUE,否则返回FALSE。重要的是要注意,仅仅因为邮件被接受传递,并不意味着邮件实际上将到达预定目的地。

这一点很重要,因为:
如果您收到FALSE返回值,您知道错误在于您的服务器接受您的邮件。这可能不是编码问题,而是服务器配置问题。您需要与系统管理员联系,以了解发生这种情况的原因。 如果您收到TRUE返回值,则并不意味着您的电子邮件肯定会被发送。它只是意味着电子邮件已成功通过PHP发送到服务器上的各自处理程序。在PHP控件之外还有更多的失败点可能导致电子邮件无法发送。 因此,FALSE将帮助您指向正确的方向,而TRUE并不一定意味着您的电子邮件已成功发送。

4-检查您的垃圾邮件文件夹/防止您的电子邮件被标记为垃圾邮件。

5-确保提供邮件标题。

$header = "From: noreply@example.com\r\n"; 
$header.= "MIME-Version: 1.0\r\n"; 
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$header.= "X-Priority: 1\r\n"; 

6-结束多个帐户。
帮助排除电子邮件帐户问题。

7-考虑使用替代邮件程序。 PHP内置的mail()函数非常方便,通常可以完成工作。但是有一些替代方案可以提供更多的功能和灵活性,包括处理上面列出的许多问题。可能会考虑使用的是受欢迎的PHPMailer