我知道之前曾问过这个问题。
当我调用PHP mail()函数时,它返回true。
我检查了我的php.ini(我正在运行CentOS):
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
我在一个论坛中读到我必须安装 sendmail 。所以我安装了它。现在,具有mail()函数的站点不再加载。所以我删除了sendmail,mail()函数再次返回true,但不发送邮件。
有什么想法吗?
答案 0 :(得分:3)
要发送电子邮件,您需要SMTP服务器(本地或远程)。实际上,您的邮件功能只是将邮件传递给您的SMTP服务器,这是真正发送您的电子邮件的邮件。
在你的php.ini中出现这一行
sendmail_path = /usr/sbin/sendmail -t -i
您应该知道是否使用该配置参数(来自manual):
如果设置,则忽略smtp,smtp_port和sendmail_from 执行指定的命令。
但最重要的是你只需卸载 sendmail ,这样你就可以发现你的邮件无处可去。我知道 sendmail 给你一些问题,可能是配置问题,但现在你的php.ini配置错了。
如何解决?
开始从php.ini中删除 sendmail_path 参数。
安装一个简单的配置SMTP服务器,如 postfix 。
验证后缀是否正在侦听端口22:
netstat -lnt
尝试从您的php mail()函数发送邮件
验证您的邮件是否已正确发送(请检查 /var/log/mail.log 或 /var/log/mail/mail.log 文件)
您还可以验证邮件不在后缀队列中:
postqueue -f
答案 1 :(得分:2)
我遇到了类似的问题; mail()
和wp_mail()
个函数都返回TRUE
,但没有电子邮件发送到我的 xyz@yahoo.com 电子邮件帐户。
事实证明,雅虎正在阻止这些电子邮件成为垃圾邮件。我没有在我的表单上实现验证码,因此许多垃圾邮件被发送到雅虎,这就是他们阻止电子邮件的原因。电子邮件已成功发送,但雅虎将其标记为垃圾邮件。
确保这不是您的问题。
答案 2 :(得分:0)
请检查您的DNS, 我在localhost上测试时会遇到同样的问题,但是在真正的主机上工作。 问题是假DNS,您的电子邮件被谷歌阻止。 如果您使用其他电子邮件服务(例如:雅虎邮件)进行测试,您将收到垃圾邮件。 我在检查邮件日志后找到了它
答案 3 :(得分:-1)
我在设置smtp时出现问题,所以我最终使用了gmail。您可以按照指示here发送邮件给PEAR MAIL:
$from = "NoReply <noreply@random.com>";
$to = "someone <someone@somemail.com>";
$subject = "my subject";
$body = "my body";
$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "gmailaccount@gmail.com";
$password = "gmailpass";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
如果您使用gmail,您的$ from将被用于发送它的电子邮件地址替换。