PHP mail()函数返回true,但没有消息 [英] PHP mail() function return true but no message

查看:69
本文介绍了PHP mail()函数返回true,但没有消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的问题,

我有一个简单的PHP脚本,用于使用汞邮件服务器将电子邮件发送到localhost并使用Mozilla Thunderbird进行阅读.而且有效.

I have a simple PHP script to send email to localhost with mercury mail server and read it with Mozilla Thunderbird. And it's work.

然后,我将XAMPP版本升级到1.8.1,我的函数返回true,但是没有发送电子邮件.

And then, I upgarde XAMPP version to 1.8.1 and my function return true but no email delivered.

<?php
$to = "root@localhost.com";
$subject = "Hi!";
$body="test";

$headers = "From: root@localhost.com"; 

if (mail($to, $subject, $body, $headers)) {
    echo "Message successfully sent!";
} else {
    echo "Message delivery failed...";
}
?>

我试图用Thunderbird将电子邮件发送到root@localhost.com,并且可以正常工作.

I tried to send email with Thunderbird to root@localhost.com and it work.

所以我尝试将php.ini中的邮件功能更改为此,但不起作用

So iI try to change mail function in php.ini to this but not work

    [mail function]
    ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury
     SMTP = localhost
     smtp_port = 25

    ; For Win32 only.
    ; http://php.net/sendmail-from
    sendmail_from = root@localhost.com

    ; XAMPP IMPORTANT NOTE (1): If XAMPP is installed in a base directory with spaces (e.g. c:\program filesC:\xampp) fakemail and mailtodisk do not work correctly.
    ; XAMPP IMPORTANT NOTE (2): In this case please copy the sendmail or mailtodisk folder in your root folder (e.g. C:\sendmail) and use this for sendmail_path.  

    ; XAMPP: Comment out this if you want to work with fakemail for forwarding to your mailbox (sendmail.exe in the sendmail folder)
    sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"

    ; XAMPP: Comment out this if you want to work with mailToDisk, It writes all mails in the C:\xampp\mailoutput folder
    sendmail_path = "C:\xampp\mailtodisk\mailtodisk.exe"

    ; Force the addition of the specified parameters to be passed as extra parameters
    ; to the sendmail binary. These parameters will always replace the value of
    ; the 5th parameter to mail(), even in safe mode.
    ;mail.force_extra_parameters =

    ; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
    mail.add_x_header = Off

    ; Log all mail() calls including the full path of the script, line #, to address and headers
    ;mail.log = "C:\xampp\php\logs\php_mail.log"

I try to change sendmail.ini to this but not work

; configuration for fake sendmail

; if this file doesn't exist, sendmail.exe will look for the settings in
; the registry, under HKLM\Software\Sendmail

[sendmail]

; you must change mail.mydomain.com to your smtp server,
; or to IIS's "pickup" directory.  (generally C:\Inetpub\mailroot\Pickup)
; emails delivered via IIS's pickup directory cause sendmail to
; run quicker, but you won't get error messages back to the calling
; application.

smtp_server=localhost

; smtp port (normally 25)

smtp_port=25

; SMTPS (SSL) support
;   auto = use SSL for port 465, otherwise try to use TLS
;   ssl  = alway use SSL
;   tls  = always use TLS
;   none = never try to use SSL

smtp_ssl=auto

; the default domain for this server will be read from the registry
; this will be appended to email addresses when one isn't provided
; if you want to override the value in the registry, uncomment and modify

;default_domain=mydomain.com

; log smtp errors to error.log (defaults to same directory as sendmail.exe)
; uncomment to enable logging

error_logfile=error.log

; create debug log as debug.log (defaults to same directory as sendmail.exe)
; uncomment to enable debugging

;debug_logfile=debug.log

; if your smtp server requires authentication, modify the following two lines

auth_username=
auth_password=

; if your smtp server uses pop3 before smtp authentication, modify the 
; following three lines.  do not enable unless it is required.

pop3_server=
pop3_username=
pop3_password=

; force the sender to always be the following email address
; this will only affect the "MAIL FROM" command, it won't modify 
; the "From: " header of the message content

force_sender=

; force the sender to always be the following email address
; this will only affect the "RCTP TO" command, it won't modify 
; the "To: " header of the message content

force_recipient=

; sendmail will use your hostname and your default_domain in the ehlo/helo
; smtp greeting.  you can manually set the ehlo/helo name if required

hostname=

有什么主意吗?

推荐答案

如果邮件返回true,那么php的工作就完成了.它已将电子邮件移交给您的外发邮件服务器.您需要检查该服务器的日志,以查看从那时开始会发生什么.

If mail returns true, then php's job is done. it's handed the email over to your outgoing mail server. You need to check that server's logs to see what happens from that point forward.

例如PHP在发送电子邮件中的作用基本上等同于拿一个信封,递到街角,然后将其放入邮箱.之后,PHP完成,并且可以报告成功.

e.g. PHP's role in sending an email is basically the equivalent of taking an envelope you hand it, walking down to the street corner, and dropping it into the mailbox. After that, PHP's done and it can report success.

如果该邮箱被醉酒的驱动程序钉住并且邮件被销毁,那不是PHP的错.如果邮件被拾起并发送到邮政分拣设施然后丢失,那也不是PHP的问题.

If that mailbox gets nailed by a drunk driver and the mail gets destroyed, that's not PHP's fault. If the mail gets picked up and sent to a postal sorting facility and then gets lost, that's also not PHP's problem.

因此,请检查您的邮件服务器的日志.如果无法传递邮件,则会报告原因.如果它 DID 将邮件发送到目标服务器,它将报告此情况,然后您需要找出为什么接收服务器没有执行其工作的原因-可能您的电子邮件被标记为垃圾邮件并扔进垃圾桶.

So go check your mail server's logs. If it can't deliver the mail, it'll report why. If it DID deliver the mail to the destination server, it'll report so, and then you need to find out why the receiving server isn't doing its job - maybe your email is getting flagged as spam and dump in the trash.

这篇关于PHP mail()函数返回true,但没有消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆