【问题标题】:PHP send mail works in command line but not PHP filePHP 发送邮件在命令行中工作,但不是 PHP 文件
【发布时间】:2013-12-18 20:58:35
【问题描述】:

我将 SMTP 设置为电子邮件,当使用命令行发送电子邮件时,这工作得非常好。但是,我编写了这个简单的代码来测试 PHP 文件,它在从浏览器加载时不起作用,从命令行运行 php mail.php 时也不起作用。这是简单的代码:

<?php
if(mail("user@gmail.com","Testing PHP","Hope this works!"))
    print "Email successful";
else
    print "Failure";
?>

当我运行php mail.php 时,我得到一个

Authorization Failed (xxxx Too Many Login Attemps, please try again later)

消息...这让我感到困惑,因为它仅在使用命令行功能时通过了授权。

任何帮助将不胜感激!

【问题讨论】:

  • 您在说些奇怪的话:当邮件功能无法在任何地方登录时,您怎么会收到“授权失败”消息?请从文件中删除任何其他代码并运行纯邮件功能。
  • 我的意思是,当使用 apache 在浏览器中运行上述文件时,我确实收到了上面代码中描述的“失败”消息,所以我决定尝试运行代码行“php mail.php”(我的 php 文件的名称),希望能得到一些有用的错误信息。导致的错误消息是关于身份验证失败的错误消息,在命令行中给出。感谢您的回复!
  • 我怀疑,您服务器上的 sendmail 或 postfix 有问题。您联系过托管支持吗?
  • 我实际上正在使用一个 ec2 实例(学生项目)。我想我只是不断地回到为什么它会使用 linux 命令行 msmtp 通过身份验证,但邮件功能却没有?

标签: php amazon-ec2 smtp sendmail


【解决方案1】:

这取决于您的分布。例如。在 Debian 上,CLI(命令行)和 webserver php(也取决于您如何运行 php 脚本 cgi、fpm 等)的配置是分开的。

在配置/etc/php5/cli/php.ini 中,您可能对mail function 部分感兴趣:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path = sendmail -t -i

确保您已正确配置 SMTP,您可以从控制台对其进行测试:

php -r 'mail("test@example.com","Testing php -v ".phpversion(),"php on ".gethostname());'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-24
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2010-11-30
    相关资源
    最近更新 更多