嘿伙计们,最近我刚刚在 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
或其他邮件相关日志。