【问题标题】:PHP send mail on windows causing it to 'hang' after sending emailPHP在Windows上发送邮件导致它在发送电子邮件后“挂起”
【发布时间】:2009-08-27 18:52:30
【问题描述】:

我们开始构建一个网络应用程序。我的同事正在 linux 上开发,我正在通过运行 windows xp 的 WAMP 堆栈运行。我们正在使用 Zend。

当我们提交表单并使用 Zend 电子邮件发送电子邮件时,电子邮件会发送,然后我会得到一个空白屏幕,而在 linux 机器上应用程序将正常运行。

所以我编写了自己的小脚本 mail.php,它使用了 phpmailer - 完全相同的事情发生了,电子邮件发送,然后是空白屏幕。所以我们有:

if(!$mail->Send())
{
echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
echo "Message has been sent";
}

所以没有错误报告,电子邮件发送,但“消息已发送”永远不会打印到屏幕上(或其他任何东西,普通 HTML 也是)。

我不是很技术,所以如果有明显的调试步骤需要采取,我们深表歉意。是否有一些我错过的 windows php 配置特有的东西?

这是一个带身份验证的异地 SMTP 服务器。

【问题讨论】:

    标签: php windows smtp email


    【解决方案1】:

    听起来您遇到了错误,但只是没有看到。确保你的代码中有这个地方

    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    

    并检查您的 apache 日志中是否存在 500 个错误。

    【讨论】:

    • 嗨,彼得。非常感谢您的回复。我添加了您建议的行,但仍然出现空白屏幕。 Apache 没有显示我可以看到的错误,Apache 访问日志中的最后一个条目是:127.0.0.1 - - [27/Aug/2009:20:17:08 +0100] "GET /mail.php HTTP/1.1" 200 - 看起来不错?
    【解决方案2】:

    PHP 有它自己的错误日志,如果有疑问,请检查那里。你应该可以通过运行找到它

    <?php
    phpinfo();
    ?>
    

    它应该位于 PHP Core 部分 - 如果它是空白的,请编辑您的 php.ini 文件并打开 log_errors 并指定您希望文件所在的位置.

    使用这个发现我无法显示的错误。

    更新

    根据文档进行了一些挖掘,似乎 Zend_Mail 本质上是 PHP 的 mail() 函数的包装器:http://framework.zend.com/manual/en/zend.mail.html

    考虑到这一点,PHP 手册中有一些关于 PHP 的 mail() 函数的信息,您需要查看有关 SendMail http://www.php.net/manual/en/ref.mail.php 页面上的第一条评论(截至撰写本文时)有关将 WAMP 服务器配置为像 *nix 服务器一样运行的详细信息 - 至少就 mail() 操作而言;-)

    【讨论】:

      【解决方案3】:

      我在 Windows 机器(我的开发机器)上成功使用了 phpmailer。我可以看到设置代码吗?我做类似下面的事情。一件事是,如果您使用的是 ssl,则需要确保在 php 中安装了 openssl 模块。看看下面。确保您的 SMTPDebug 标志设置为有一些您可以使用的输出。

      <?php
      
      $mail             = new PHPMailer();
      
      $mail->IsSMTP();
      $mail->Host       = "blah.com";
      $mail->SMTPDebug  = 1;
      $mail->SMTPAuth   = true;
      $mail->SMTPSecure = "ssl";
      $mail->Host       = "mail.blah.com";
      $mail->Port       = 465;
      $mail->Username   = "noreply@blah.com";
      $mail->Password   = "smtppass";
      
      $mail->SetFrom('noreply@blah.com', 'Blah Name');
      $mail->AddReplyTo("noreply@blah.com", "Blah Name");
      $mail->Sender = "noreply@blah.com"
      
      ?>
      

      【讨论】:

        【解决方案4】:

        很抱歉花了这么长时间来回答这个问题。该问题是由办公室中的防火墙阻止出站 SMTP 流量引起的。我仍然不确定为什么它什么也没返回 - 但是在这个办公室之外,当它被测试时,无效 smtp 等的 php 错误返回正常。只是在网络上获得允许的适当端口的情况。

        感谢大家的帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 2011-09-16
          • 2014-08-17
          • 2016-04-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多