PHP mail()函数成功,但没有收到任何电子邮件

时间:2013-07-25 04:37:39

标签: php

我尝试通过我的localhost php发送电子邮件,但问题是我的电子邮件中没有收到任何内容,我应该配置什么?

这是我的代码

$to="someone@gmail.com";
$name="jason";
$subject="test message";
$header="From: $name";
$message="blah blah blah";
$sentmail=mail($to,$subject,$message,$header);

echo $sentmail ? "email send" : "email send fail"?

结果是“发送电子邮件”

6 个答案:

答案 0 :(得分:4)

有2个理由不从您的localhost发送电子邮件..

  1. 您的本地环境中没有邮件服务器设置
  2. 您没有使用SMTP服务发送电子邮件。
  3. 因此,您必须配置邮件服务器,但我认为这不是一个方便的解决方案。

    最好尝试使用SMTP服务。要做到这一点,最好使用PHPMailer

    以下是使用PHPMailer类的示例。

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';
    
    $mail->Host       = "mail.example.com"; // SMTP server example
    $mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 25;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "username"; // SMTP account username example
    $mail->Password   = "password"; 
    

    您可以将此类用于任何类型的电子邮件,以替代PHP : mail()

答案 1 :(得分:2)

邮件功能将在邮件成功接受传递时返回TRUE,否则返回FALSE。

邮件功能不会检查收件箱中是否有邮件到达

http://php.net/manual/en/function.mail.php

无法检查邮件是否已发送,您可以检查收件人是否使用跟踪像素https://support.google.com/dfp_premium/answer/1347585?hl=en打开邮件

答案 2 :(得分:0)

您应该在本地计算机中集成邮件服务器以发送邮件。如果所有参数都正确,则php邮件函数返回true,它不会检查传递状态。

阅读本文,http://www.zenddeveloper.com/how-to-send-emails-from-localhost-apachephp-server/http://roshanbh.com.np/2007/12/sending-e-mail-from-localhost-in-php-in-windows-environment.html

答案 3 :(得分:0)

您需要有一个邮件服务器才能在localhost.Check PHP : send mail in localhost

中发送电子邮件

答案 4 :(得分:0)

您需要在标头上添加内容类型。为了使它更容易,您可以编写简单的函数然后调用它。这是一个例子:

 function sendMail($to, $title, $url, $from, $username, $password) {
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From: '.$title.' <'.$from.'>' . "\r\n";
    $subject = 'Welcome to '.$title;
    $message = 'Thank you for joining <strong>'.$title.'</strong><br /><br />Your username: <strong>'.$username.'</strong><br />Your Password: <strong>'.$password.'</strong><br /><br />You can log-in at: <a href="'.$url.'" target="_blank">'.$title.'</a>';
    return @mail($to, $subject, $message, $headers);
}

答案 5 :(得分:0)

默认情况下,PHP的mail()函数会将邮件发送到Linux上的sendmail程序。

要使sendmail正常工作,您需要具有正确配置且正常运行的MTA。例如,postfix是一个相对容易配置的MTA。

配置MTA时,您可以将其配置为直接发送邮件,将其作为Internet上的邮件服务器进行配置,或将邮件中继到其他服务器。

配置您自己的MTA直接发送邮件不是为了轻松。发送电子邮件现在变得很复杂,需要大量的工作才能让您的邮件被gmail或yahoo等主要邮件服务器接受。

如果您的ISP提供外发邮件服务器并且很乐意为您转发邮件,您可以设置postfix来通过该服务器中继所有邮件,并节省一些配置麻烦。如果您使用postfix,这只需要像后缀配置中的Postfix on a null client下的示例一样进行设置。

要记住的主要事情是,无论您如何配置邮件服务器,都应避免将其设置为在传出网络上中继传入邮件(即将其设置为开放中继)。在空邮件程序示例配置中,行inet_interfaces = loopback-only实现了此目的。

请注意,将postfix或其他内容设置为MTA的替代方法是使用PHP自己的内置SMTP支持,这实际上意味着您将PHP本身用作仅将邮件转发到中继的MTA。

使用像postfix这样的专用MTA的优点是可靠性。如果到达外部邮件中继存在临时问题,Postfix可以对电子邮件进行排队。它也会在邮件排队后立即返回,因此您的PHP邮件功能将更快地执行,并且在将邮件传递到外部邮件中继时无需等待。