我已经看到了关于这个主题的数千个类似的问题。 并且肯定知道 SO 中的“标记为重复问题”的事情。
但是,仍然不清楚如何或者简单地说要从PHP mail()函数获得雅虎收件箱电子邮件。
在雅虎网站上,他们提供了一个示例脚本来发送邮件
链接http://help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-03.html
$email = "EMAIL TO"; $subject = "Test Message"; $msg = "This is a test message"; //$eLog="/tmp/mailError.log"; //Get the size of the error log //ensure it exists, create it if it doesn't //$fh= fopen($eLog, "a+"); //fclose($fh); //$originalsize = filesize($eLog); mail($email,$subject,$msg); //NOTE: I commented out unneeded lines使用雅虎自己的合法网站中发现的这种基本方法失败了。
第二个建议是(对于PERL),但可以通过一些编辑转换为PHP:
#!/usr/bin/perl print "Content-type: text/html\n\n"; $title='mail test'; $to='MAIL ADDRESS TO SEND TO'; $from= 'EMAIL@YOURDOMAIN.COM'; $subject='Using Sendmail'; open(MAIL, "|/usr/sbin/sendmail -t"); ## Mail Header print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; ## Mail Body print MAIL "This is a test message from Yahoo \n"; close(MAIL); print "<html><head><title>$title< /title></head>\n<body>\n\n"; ## START HTML content print "<h1>$title</h1>\n"; print "<p>A message has been sent from $from to $to"; ## END HTML CONTENT print "\n\n</body></html>";链接: http : //help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-17.html
经过几次编辑,使其成为PHPish,它看起来像:
<?php ///#!/usr/bin/perl $title='_01_mail test'; $to='user_name@yahoo.com, user_name2@gmail.com'; $from= 'info@companyname.com'; $subject='_01_Using Sendmail'; ## Mail Header $headers = "To: $to\n"; $headers .= "From: $from\n"; $headers .= "Subject: $subject\n\n"; ## Mail Body $message = "<html><head><title>$title< /title></head><body> <h1>$title</h1> <p>A message has been sent from $from to $to\n\n </p></body></html>"; if ( mail($to,$subject,$message,$headers) ) { echo "The email has been sent!"; } else { echo "The email has failed!"; } ?>GMAIL的user_name2@gmail.com根据需要发送电子邮件,但user_name@yahoo.com以某种方式发送。
那么, 我们该怎么办? ......如果YAHOO自己的样品不起作用,那么:
a)PHP mail()函数是否被弃用?...如果是,那么替代方案是什么?
b)如果该功能仍然有效,我们如何提出YAHOO Inbox友好的 PHP代码?
c)PHP mail()函数的最佳实践是什么?
编辑:
附加测试。
刚刚以这种格式测试它由PHP mail()函数建议不发送电子邮件 :
$subject = "subject"; $message = "message"; $to = "USER_NAME_HERE@yahoo.com"; $type = "plain"; // or HTML $charset = "utf-8"; $mail = "no-reply@".str_replace("www.", "", $_SERVER["SERVER_NAME"]); $uniqid = md5(uniqid(time())); $headers = "From: ".$mail."\n"; $headers .= "Reply-to: ".$mail."\n"; $headers .= "Return-Path: ".$mail."\n"; $headers .= "Message-ID: <".$uniqid."@".$_SERVER["SERVER_NAME"].">\n"; $headers .= "MIME-Version: 1.0"."\n"; $headers .= "Date: ".gmdate("D, d M Y H:i:s", time())."\n"; $headers .= "X-Priority: 3"."\n"; $headers .= "X-MSMail-Priority: Normal"."\n"; $headers .= "Content-Type: multipart/mixed;boundary=\"----------".$uniqid."\""."\n\n"; $headers .= "------------".$uniqid."\n"; $headers .= "Content-type: text/".$type.";charset=".$charset.""."\n"; $headers .= "Content-transfer-encoding: 7bit";仍然雅虎没有收邮件。
EDIT2
我去了这个链接: http : //www.forensicswiki.org/wiki/Evolution_Header_Format
YAHOO说标题应该是这样的:
Subject: header test From: Username <username@sendinghost.com> To: Username <username@receivinghost.com> Content-Type: text/plain Date: Sat, 28 Jul 2007 11:52:35 +0200 Message-Id: <1185616355.19231.0.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 Content-Transfer-Encoding: 7bit与PHP mail() func. ...... GMail再次收到YAHOO拒绝...我在Logs没有错误
I have seen thousands of similar questions asked on this topic. And for sure am aware of the "MARKED AS DUPLICATE QUESTION" thing in SO.
However, it is still not Clear how or what one has to do in simple terms to have yahoo Inbox emails from a PHP mail() function.
In the Yahoo site, they give a sample script to send mails like
Link http://help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-03.html
$email = "EMAIL TO"; $subject = "Test Message"; $msg = "This is a test message"; //$eLog="/tmp/mailError.log"; //Get the size of the error log //ensure it exists, create it if it doesn't //$fh= fopen($eLog, "a+"); //fclose($fh); //$originalsize = filesize($eLog); mail($email,$subject,$msg); //NOTE: I commented out unneeded linesUsing this basic approach found in the Yahoo's own legitimate website fails.
The second suggestion would be (for PERL) but can be converted to PHP with some editing:
#!/usr/bin/perl print "Content-type: text/html\n\n"; $title='mail test'; $to='MAIL ADDRESS TO SEND TO'; $from= 'EMAIL@YOURDOMAIN.COM'; $subject='Using Sendmail'; open(MAIL, "|/usr/sbin/sendmail -t"); ## Mail Header print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; ## Mail Body print MAIL "This is a test message from Yahoo \n"; close(MAIL); print "<html><head><title>$title< /title></head>\n<body>\n\n"; ## START HTML content print "<h1>$title</h1>\n"; print "<p>A message has been sent from $from to $to"; ## END HTML CONTENT print "\n\n</body></html>";Link: http://help.yahoo.com/l/us/yahoo/smallbusiness/webhosting/php/php-17.html
After few edits to make it PHPish it looks like:
<?php ///#!/usr/bin/perl $title='_01_mail test'; $to='user_name@yahoo.com, user_name2@gmail.com'; $from= 'info@companyname.com'; $subject='_01_Using Sendmail'; ## Mail Header $headers = "To: $to\n"; $headers .= "From: $from\n"; $headers .= "Subject: $subject\n\n"; ## Mail Body $message = "<html><head><title>$title< /title></head><body> <h1>$title</h1> <p>A message has been sent from $from to $to\n\n </p></body></html>"; if ( mail($to,$subject,$message,$headers) ) { echo "The email has been sent!"; } else { echo "The email has failed!"; } ?>The user_name2@gmail.com for GMAIL sends the Email as required but user_name@yahoo.com somehow does not go anywhere.
So, what should we do?... If YAHOO's own samples are not working, then:
a) Is PHP mail() function getting deprecated?... If so, what is the alternative?
b) Should the function still be valid, how do we come up with YAHOO Inbox friendly PHP Codes?
c) What is the best practice for PHP mail() Function?
EDIT:
Additional tests.
Just tested it in this format Suggest by PHP mail() function not sending email:
$subject = "subject"; $message = "message"; $to = "USER_NAME_HERE@yahoo.com"; $type = "plain"; // or HTML $charset = "utf-8"; $mail = "no-reply@".str_replace("www.", "", $_SERVER["SERVER_NAME"]); $uniqid = md5(uniqid(time())); $headers = "From: ".$mail."\n"; $headers .= "Reply-to: ".$mail."\n"; $headers .= "Return-Path: ".$mail."\n"; $headers .= "Message-ID: <".$uniqid."@".$_SERVER["SERVER_NAME"].">\n"; $headers .= "MIME-Version: 1.0"."\n"; $headers .= "Date: ".gmdate("D, d M Y H:i:s", time())."\n"; $headers .= "X-Priority: 3"."\n"; $headers .= "X-MSMail-Priority: Normal"."\n"; $headers .= "Content-Type: multipart/mixed;boundary=\"----------".$uniqid."\""."\n\n"; $headers .= "------------".$uniqid."\n"; $headers .= "Content-type: text/".$type.";charset=".$charset.""."\n"; $headers .= "Content-transfer-encoding: 7bit";STILL YAHOO DOES NOT INBOX THE MAIL.
EDIT2
I went to this Link: http://www.forensicswiki.org/wiki/Evolution_Header_Format
YAHOO said the header should be like this:
Subject: header test From: Username <username@sendinghost.com> To: Username <username@receivinghost.com> Content-Type: text/plain Date: Sat, 28 Jul 2007 11:52:35 +0200 Message-Id: <1185616355.19231.0.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.10.1 Content-Transfer-Encoding: 7bitThested with PHP mail() func. ... GMail received, again, YAHOO Rejected... I Get NO Error in the Logs
最满意答案
我终于在脸上露出了笑容。 与@DaveRandom一起工作,他帮我提出了这些代码:
<?php $senderName = 'Erick Best'; //Enter the sender name $username = 'erickbestism@yahoo.com'; //Enter your Email $password = 'passwordHere';// Enter the Password $recipients = array( 'erickbestism@gmail.com' => 'Erick Best', 'erickbestism@yahoo.com' => 'Yahoo User', ); ///That's all you need to do //No need to edit bellow require '../PHPMailerAutoload.php'; //Create a new PHPMailer instance $mail = new PHPMailer(); // Set up SMTP $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 587; // we changed this from 486 $mail->Username = $username; $mail->Password = $password; // Build the message $mail->Subject = 'PHPMailer mail() test'; $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); $mail->AltBody = 'This is a plain-text message body'; $mail->addAttachment('images/phpmailer_mini.gif'); // Set the from/to $mail->setFrom($username, $senderName); foreach ($recipients as $address => $name) { $mail->addAddress($address, $name); } //send the message, check for errors if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } ?>注意:下面的代码使用PHPMailer
这就像VOODOO一样......它向任何提供商发送邮件。 包括**YAHOO**
希望它可以帮到某人!
I Finally got a laaaaarge smile on my face. Working together with @DaveRandom, He helped me come up with these codes:
<?php $senderName = 'Erick Best'; //Enter the sender name $username = 'erickbestism@yahoo.com'; //Enter your Email $password = 'passwordHere';// Enter the Password $recipients = array( 'erickbestism@gmail.com' => 'Erick Best', 'erickbestism@yahoo.com' => 'Yahoo User', ); ///That's all you need to do //No need to edit bellow require '../PHPMailerAutoload.php'; //Create a new PHPMailer instance $mail = new PHPMailer(); // Set up SMTP $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = "tls"; $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 587; // we changed this from 486 $mail->Username = $username; $mail->Password = $password; // Build the message $mail->Subject = 'PHPMailer mail() test'; $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); $mail->AltBody = 'This is a plain-text message body'; $mail->addAttachment('images/phpmailer_mini.gif'); // Set the from/to $mail->setFrom($username, $senderName); foreach ($recipients as $address => $name) { $mail->addAddress($address, $name); } //send the message, check for errors if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } ?>NOTE: The code bellow uses PHPMailer
And this WORKED like VOODOO!... It sent mails to any provider. Including **YAHOO**
Hope it helps someone!
更多推荐
发布评论