我正在开发一个应用程序,并且已经在PHP中测试了mail()函数。以下工作在我的本地计算机上可以正常发送电子邮件给我自己,但是一旦我尝试将它从测试环境发送到我的本地计算机,它就会默默地失败。
我仍然会收到“已发送邮件”消息,但不会发送任何消息。我打开了php.ini文件中的邮件日志记录,但是在我刷新页面之后,似乎没有填充。
同样,.php文件和php.ini文件在两种环境中都是相同的。端口25已在测试环境中打开,我们正在使用Microsoft Exchange服务器。
<?php
$to = "user@example.com";
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "user@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
echo "Mail Sent.";
?>
php.ini文件的SMTP区域:
[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = exhange.server.org
; http://php.net/smtp-port
smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
sendmail_from = user@example.com
答案 0 :(得分:1)
首先,即使邮件失败,回显“邮件已发送”。将会显示。 php函数mail()将在成功时返回true,在失败时返回false。把它放在一个if,你可以检查邮件是否已发送:
if(mail($to,$subject,$message,$headers)) echo "Mail Sent.";
应该检查电子邮件是否已发送。
关于你的问题,它不起作用,我不太确定,我可能是错的,但根据我的经验,一些服务器需要每个标题后面的\ r \ n。
$headers = "From:" . $from . "\r\n";
但正如已经说过的那样,我可能错了并且与这里的示例相关,在使用一个标题时没有必要 - http://php.net/manual/en/function.mail.php
当我测试邮件功能时,我没有将任何标题信息放入邮件功能,只有$to
,$subject
,$message
。你可以尝试一下。我真的很讨厌使用myown的php mail函数,我总是使用PHP邮件程序类。
很抱歉,如果我无法解答您的真实问题,则无法发送电子邮件。我希望你
答案 1 :(得分:0)
检查您的PHP发行版中的PEAR和Mail.php。在cmd行,“php -i”找到你的资源。我相信PEAR和Mail.php对于5.2以上的发行版来说相当普遍。我在Mac和Linux服务器上,而不喜欢PEAR邮件而不是PHP邮件功能。 Windows应该是类似的。以下是使用PEAR Mail发送多封电子邮件的示例。
/** PEAR::MAIL
* PEAR::Mail only opens one mail socket for multiple emails sent
*/
require_once('/opt/local/lib/php/Mail.php');
$body = $_POST['message'];
//using sendmail on backend
$params['sendmail_path'] = '/usr/sbin/sendmail';
//using factory method
$mail_object =& Mail::factory('sendmail',$params);
//loop through selected users to send
for ($i=0;$i<count($recipients);$i++){
if (!empty($recipients[$i]['email'])&&($recipients[$i]['alt_email'])){
//concatinate email and alt_email
$address = $recipients[$i]['email'].",".$recipients[$i]['alt_email'];
}
else {
//only one user address
$address = $recipients[$i]['email'];
}
//send the mail instance
$mail_object->send($address,$headers,$body);
if (PEAR::isError($mail_object)) {print($mail_object->getMessage());}
} //close the for loop
答案 2 :(得分:0)
有时您的托管服务提供商会阻止外发SMTP身份验证。请与您的托管服务提供商确认。