【问题标题】:PHP mail() function returns true, but doesn't send mailPHP mail() 函数返回 true,但不发送邮件
【发布时间】:2014-07-14 11:37:37
【问题描述】:

我知道以前有人问过这个问题。

当我调用 PHP mail() 函数时,它返回 true。

我检查了我的 php.ini(我正在运行 CentOS):

SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On

我在一个论坛上看到我必须安装 sendmail。所以我安装了它。现在具有 mail() 功能的网站不再加载。于是我把sendmail去掉了,mail()函数又返回了true,但是没有发送邮件。

有什么想法吗?

【问题讨论】:

标签: php email smtp sendmail


【解决方案1】:

要发送电子邮件,您需要一个 SMTP 服务器(本地或远程)。实际上,您的邮件功能只是将邮件传递到您的 SMTP 服务器,而这才是真正发送您的电子邮件的功能。

在你的 php.ini 中出现这一行

sendmail_path = /usr/sbin/sendmail -t -i

您应该注意是否使用该配置参数(来自manual):

如果设置,smtp、smtp_port 和 sendmail_from 将被忽略,并且 执行指定的命令。

但这里最重要的是您只需卸载 sendmail,这样您的邮件就会无处可去。我知道 sendmail 给你带来了一些问题,可能是配置问题,但现在你的 php.ini 配置是错误的。

如何解决?

  • 开始从 php.ini 中删除 sendmail_path 参数。

  • 安装一个简单的 SMTP 服务器,如 postfix

  • 验证 postfix 是否在端口 22 上侦听:

netstat -lnt

  • 尝试从您的 php mail() 函数发送邮件

  • 验证您的邮件是否已正确发送(检查您的 /var/log/mail.log/var/log/mail/mail.log 文件)

  • 您还可以验证邮件不在后缀队列中:

后队列-f

【讨论】:

    【解决方案2】:

    我遇到了类似的问题; mail()wp_mail() 函数都返回 TRUE,但没有电子邮件发送到我的 xyz@yahoo.com 电子邮件帐户。

    事实证明,雅虎将这些电子邮件作为垃圾邮件进行了拦截。我没有在我的表单上实施验证码,因此许多垃圾邮件被发送到雅虎,这就是他们阻止这些电子邮件的原因。电子邮件已成功发送,但 Yahoo 将其标记为垃圾邮件。

    确保这不是您的问题。

    【讨论】:

    • @Irfan Kissa @OnlyMAJ 我在共享主机上遇到了完全相同的问题。 mail() 返回真,但什么也没有。我的垃圾文件夹里什么都没有。到底是怎么回事
    • @user2230470 您可以将电子邮件发送给 yahoo 和 google 以外的其他提供商,如果它也无法正常工作,那么您的托管存在问题,否则问题来自 yahoo 或 google。
    • @OnlyMAJ 昨晚我尝试将一些内容发送到我自己域的电子邮件中,这很有效。我原来的电子邮件是一个hotmail地址,一直没有用。我昨天尝试发送到 gmail 帐户,但什么也没有。我今天要做更多的测试。据说我的主人支持它...有什么替代方案?
    【解决方案3】:

    请检查您的 DNS, 在本地主机上测试时遇到同样的问题,但在真实主机上工作。 问题是假 DNS,你的电子邮件被谷歌阻止了。 如果您使用其他电子邮件服务(例如:雅虎邮件)进行测试,您将收到垃圾邮件。 我是在查看邮件日志后发现的

    【讨论】:

    • 如何检查?
    • 邮件日志哥们在哪里?
    【解决方案4】:

    我在设置 smtp 时遇到问题,所以我最终使用了 gmail。您可以按照here的指示使用 PEAR MAIL 发送邮件:

    $from = "NoReply <noreply@random.com>";
    $to = "someone <someone@somemail.com>";
    $subject = "my subject";
    $body = "my body";
    $host = "ssl://smtp.gmail.com";
    $port = "465";
    $username = "gmailaccount@gmail.com";
    $password = "gmailpass";
    
    $headers = array ('From' => $from,
    'To' => $to,
    'Subject' => $subject);
    $smtp = Mail::factory('smtp',
    array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));
    $mail = $smtp->send($to, $headers, $body);
    

    如果您使用 gmail,您的 $from 将替换为用于发送邮件的电子邮件地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2020-03-08
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      相关资源
      最近更新 更多