5

最近我在运行 kubuntu 桌面的 ubuntu 12.04 服务器上安装了 msmtp。msmtp 的安装运行良好,我什至可以使用 gmail 的 smtp 服务器通过终端发送邮件。

我的问题是,虽然通过终端发送邮件,但它仍然不适用于 php 邮件。我曾尝试使用 phpmail()函数,但从未收到任何电子邮件。

我检查了 apache 错误日志 (/var/log/apache2/error.log),但它们是空的。
有谁知道如何解决这一问题?如果需要任何进一步的信息,请直说:)

同样在执行 php 脚本时,也不会出现错误。

下面的代码与 Mail Sent 相呼应,但我从未收到过电子邮件:

<?
if(mail( 'noreply.njmedia@gmail.com', 'Test mail from localhost', 'Working Fine.'))
{
    echo 'Mail sent';
}
else
{
    echo 'Error. Please check error log.';
}
?>
4

2 回答 2

4

对我来说,原因是 msmtp 配置文件的文件所有权和权限不正确。

当我尝试从 CLI as 运行 PHP 邮件发送脚本时root,它起作用了。但是,切换用户www-data并尝试再次运行脚本(也在 CLI 上)失败并显示以下消息:

msmtp: /etc/msmtprc: contains secrets and therefore must be owned by you
msmtp: /etc/msmtprc: contains secrets and therefore must have no more than user read/write permissions

通过对 Apache(或 Nginx 等)的 HTTP 请求触发 PHP 脚本将具有相同的结果(因为 msmtp 将由www-data用户调用)。

假设您的 msmtp 配置文件位于/etc/msmtprc,这些命令将解决这些问题:

chown www-data:www-data /etc/msmtprc
chmod 600 /etc/msmtprc

在进行这些更改之前,请考虑这些新权限是否适合您的情况(例如,是否存在安全隐患?)。

于 2020-01-24T05:00:06.090 回答
1

php 邮件模块调用一个名为 sendmail 的系统命令来发送电子邮件。sendmail 由各种邮件服务器实现,例如 postfix 或 exim。如我所见, msmtp 不提供 sendmail 二进制文件。请检查是否可以通过命令行执行 sendmail。如果没有,请尝试安装 postfix。

更新:我明白了,msmtp-mta 也确实提供了 sendmail 二进制文件。如果你不想要后缀,你可以试试这个。

于 2012-08-26T22:19:08.763 回答