在 localhost 问题中测试 php mail()

在 localhost 问题中测试 php mail()

嘿伙计们,最近我刚刚在 Linux 中安装了 msmtp,我甚至从终端发送了一封邮件,而且它有效:

echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug --from=default -t [email protected]

但是在 php 中,编辑 php.ini 文件后出现以下内容:

sendmail_path = '/usr/bin/msmtp -t'

并使用这段代码:

<?php
if ( mail ( '[email protected]', 'Test mail from localhost', 'Working Fine.' ) ){
echo 'Mail sent';
}
else{
echo 'Error. Please check error log.';
}

?>

我收到了邮件已发送消息,但收件箱中却没有收到任何消息。甚至垃圾邮件文件夹中也没有。我做错了什么吗?

msmtp 配置文件:

defaults
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account default
host smtp.gmail.com
port 587
auth on user [email protected]
password password
from [email protected]
logfile /var/log/msmtp.log

答案1

我遇到了同样的问题。您的脚本给出了一半的解决方案。检查您的 apache 错误日志,而不是 msmtp 日志(如果它们存在的话)。:) 我的日志文件显示:

"msmtp: /etc/msmtprc: must be owned by you"

这实际上是正确的,/etc/msmtp 处的 msmtp 配置文件不属于 http。

我的 php.ini 文件是这样的:

sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -t"

希望这可以帮助。

答案2

返回值

如果邮件成功接受并传送,则返回 TRUE,否则返回 FALSE。

值得注意的是,邮件被接受投递并不意味着邮件实际上会到达预定的目的地。

因此,基本上这意味着邮件被转发到邮件传输工具,在您的情况下是/usr/bin/msmtp。您的代码可能没有问题。我认为查看的适当位置是/var/log/mail.err或其他邮件相关日志。

相关内容