0

我正在开发一个应用程序,并且一直在测试 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
4

3 回答 3

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. 你可以试一试。我真的很讨厌自己使用 php 邮件功能,我总是使用 PHP 邮件程序类。

抱歉,如果我无法回答您的真正问题,即无法发送电子邮件。我希望你

于 2012-09-22T21:11:56.903 回答
0

有时您的托管服务提供商会阻止传出 SMTP 身份验证。请与您的托管服务提供商确认。

于 2012-12-23T15:52:07.030 回答
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
于 2012-09-22T21:51:09.643 回答