问题
I have been trying get php to send mail for over a month. I am moving from 000webhost, where it worked fine, to my friend's server.
The php code that sends mail is:
$subject = $u.", your infomation";
$message = "Your password is ".$p;
$from = "me@gmail.com";
$headers = "From:" . $from;
if(mail($e,$subject,$message,$headers))
$_SESSI ON['message']="message sent";
else $_SESSION['message']="error";
the sendmail path in php.ini is "/usr/sbin/sendmail -t -i"
etc/hosts:
000.000.000.000 inspiron-1000 inspiron-1000.
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
and the mail.log:
Jun 9 22:05:07 inspiron-1000 sendmail[24552]: r5A357t5024552: from=www-data, size=144, class=0, nrcpts=1, msgid=<201306100305.r5A357t5024552@inspiron-1000.>, relay=www-data@localhost
Jun 9 22:05:07 inspiron-1000 sm-mta[24553]: r5A357A8024553: from=<www-data@inspiron-1000>, size=367, class=0, nrcpts=1, msgid=<201306100305.r5A357t5024552@inspiron-1000.>, proto=ESMTP, daemon=MTA-v4, relay=ip6-localhost [127.0.0.1]
Jun 9 22:05:08 inspiron-1000 sendmail[24552]: r5A357t5024552: to=user@gmail.com, ctladdr=www-data (33/33), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30144, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (r5A357A8024553 Message accepted for delivery)
this is mailq: MSP Queue status...
/var/spool/mqueue-client is empty
Total requests: 0
MTA Queue status...
/var/spool/mqueue (5 requests)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
r5M3LmZV023863* 19 Fri Jun 21 22:21 <www-data@inspiron-1000>
<user@gmail.com>
r5M3HicX023780* 19 Fri Jun 21 22:17 <www-data@inspiron-1000>
<user@gmail.com>
r5M3BSDF023465 19 Fri Jun 21 22:11 <www-data@inspiron-1000>
(Deferred: Connection timed out with alt4.gmail-smtp-in.l.goo)
<user@gmail.com>
r5M36Tjx023175 19 Fri Jun 21 22:06 <www-data@inspiron-1000>
(Deferred: Connection timed out with alt4.gmail-smtp-in.l.goo)
<user@gmail.com>
r5M33YQf023137* 19 Fri Jun 21 22:03 <www-data@inspiron-1000>
(Deferred: Connection timed out with alt4.gmail-smtp-in.l.goo)
<user@gmail.com>
Total requests: 5
回答1:
That isn't all of the information from mail.log. You're seeing that the local server did accept your email, but it doesn't mention trying to send that email off to GMail. You could check the mail that is queued for delivery with $ mailq
from the commandline. Chances are there are a few more lines in that log file with more information though.
回答2:
This is how I fixed it: Install phpmailer.
Here is a tutorial how to send mail with PHP mailer
Here is my code:
<?php
require 'PHPMailer-master/class.phpmailer.php';
function sendmail($to,$subject, $body)
{
return sendmailfrom($to,"myemail@gmail.com","from me", $subject, $body);
}
function sendmailfrom($to, $from, $from_name, $subject, $body)
{
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 0; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
$mail->Host = 'smtp.gmail.com';//required for gmail
$mail->Port = 465;
$mail->Username = 'myemail@gmail.com';//the email I want to send from
$mail->Password = 'mypassword'; //my password
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($to);
if(!$mail->Send()) return false;
else return true;
}
?>
When ever I want to send mail I include this code, via include("filename.php")
, and run sendmail($to,$subject, $body);
来源:https://stackoverflow.com/questions/17245657/php-mail-returns-true-message-accepted-for-delivery-but-the-message-is-not-se