PHP mail()函数在命令行下有效,但在 apache 下无效

PHP mail()函数在命令行下有效,但在 apache 下无效

我的问题是,如果我在浏览器中运行需要发送邮件的 php 脚本,它不会发送邮件,但在 cli 中可以运行。这没有帮助 PHP 的 mail() 函数在 CLI 中有效,但在 Apache 中无效

在 /etc/php/7.0/fpm 和 /etc/php/7.0/cli 中都有相同的邮件设置:

SMTP = localhost
smtp_port = 25 
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"
mail.add_x_header = On
mail.log = /var/log/maillog

如果我在终端输入

php -r mail("[email protected]", "Test", "test");

它有效,如果我输入它也可以

sudo -u www-data php -r mail("[email protected]", "Test", "test");

但是,如果我尝试从 php 交互模式发送邮件php -a ,然后简单地在那里输入,我得到的是。我试过(但是显示,所以我认为不需要允许访问)我得到错误,例如 文件以这种方式被 chmodded ,根据许多教程。mail("[email protected]", "Test", "test");/etc/msmtprc permission deniedchmod 666 /etc/msmtprcls -al-rw------- 1 www-data www-data 267 Apr 4 11:10 /etc/msmtprcmsmtp: /etc/msmtprc: contains secrets and therefore must be owned by you msmtprcchmod 600 msmtprc

答案1

不知怎的,我明白了尝试不同的配置有什么问题,所以我写下了我自己问题的答案:)

在 php7 中,/etc/php/7.0/ 中有 apache2、fpm、cli 和 mods-available 文件夹。一些教程/问题说要使 msmtp 工作,您必须编辑 fpm 和 cli 文件夹中的 php.ini。这并不完全正确。要使 apache2 与 msmtp 一起工作,以便您可以使用 mail() 函数在 php 脚本中发送电子邮件,您必须在 /etc/php/7.0/apache2 中配置 php.ini。所有 3 个 php.ini 文件的邮件配置应该相同,即

SMTP = localhost
smtp_port = 25 
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"
mail.add_x_header = On
mail.log = /var/log/maillog

请注意,-C 选项显示 msmtprc 文件的路径,该路径应与此处相同。还请注意,由于您已安装并配置了 msmtp,因此您可以从命令行发送邮件(不使用 php),因此您无需在服务器上安装 sendmail。只需配置您的 php.ini 文件,一切即可正常工作

相关内容