【问题标题】:How to check, by PHP, if my script is connecting to SMTP server如何通过 PHP 检查我的脚本是否连接到 SMTP 服务器
【发布时间】:2010-09-09 11:00:45
【问题描述】:

只是标题所说的。 想知道如何检查连接是否正常,如果没有,错误是什么。 顺便说一句,SMTP 服务器是 Exchange 2007。

【问题讨论】:

    标签: php exchange-server


    【解决方案1】:

    如果您想知道是否可以从运行 PHP 的任何地方访问 SMTP 服务器,那么您只需要在适当的端口(默认 25)上连接到它,然后查看是否返回“220”代码结果。

    $f = fsockopen('smtp host', 25) ;
    if ($f !== false) {
        $res = fread($f, 1024) ;
        if (strlen($res) > 0 && strpos($res, '220') === 0) {
            echo "Success!" ;
        }
        else {
            echo "Error: " . $res ;
        }
    }
    fclose($f) ;
    

    【讨论】:

    • 就在fclose($f); 之前添加了行fwrite($f, 'QUIT'."\r\n");。如果没有礼貌的退出,Windows 上的Papercut 会恐慌并将其 cpu 核心提升到 100%。
    • 像魅力一样工作,谢谢。
    【解决方案2】:

    由于这很可能与您的另一个问题有关:Configure mail server to work with PHP,所以我也将答案放在这里:

    您正在使用 PEAR Mail 包。 send() 方法在成功时返回 TRUE,否则返回 PEAR_Error 对象,其中将包含失败的详细信息。您很可能需要 $PEAR_Error::message。完整详情:Configure mail server to work with PHP

    【讨论】:

      【解决方案3】:

      这可能是由于防火墙不允许您的 SMTP 端口,所以试试这个 php 脚本来检查开放端口,它有最大的流行端口检查:

      <?php
      
      $ports[] = array('host'=>'interspire.smtp.com','number'=>25);
      $ports[] = array('host'=>'interspire.smtp.com','number'=>2525);
      $ports[] = array('host'=>'interspire.smtp.com','number'=>25025);
      $ports[] = array('host'=>'helpme.interspire.smtp.com','number'=>80);
      
      $ports[] = array('host'=>'google.com','number'=>80);
      $ports[] = array('host'=>'smtp.gmail.com','number'=>587);
      $ports[] = array('host'=>'smtp.gmail.com','number'=>465);
      $ports[] = array('host'=>'pop.gmail.com','number'=>995);
      $ports[] = array('host'=>'imap.gmail.com','number'=>993);
      
      $ports[] = array('host'=>'ftp.mozilla.org','number'=>21);
      $ports[] = array('host'=>'smtp2go.com','number'=>8025);
      
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>25);
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>26);
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>940);
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>8001);
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>2525);
      $ports[] = array('host'=>'relay.dnsexit.com','number'=>80);
      
      $ports[] = array('host'=>'mail.authsmtp.com','number'=>23);
      $ports[] = array('host'=>'mail.authsmtp.com','number'=>25);
      $ports[] = array('host'=>'mail.authsmtp.com','number'=>26);
      $ports[] = array('host'=>'mail.authsmtp.com','number'=>2525);
      
      foreach ($ports as $port)
      {
          //$connection = @fsockopen($port['host'], $port['number']);
          $connection = @fsockopen($port['host'], $port['number'], $errno, $errstr, 5); // 5 second timeout for each port.
      
          if (is_resource($connection))
          {
              echo '<h2>' . $port['host'] . ':' . $port['number'] . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";
      
              fclose($connection);
          }
      
          else
          {
              echo '<h2>' . $port['host'] . ':' . $port['number'] . ' is not responding.</h2>' . "\n";
          }
      }
      
      
      ?>
      

      来源:https://www.interspire.com/support/kb/getattachment.php?data=MTA2OHxwb3J0Y2hlY2sucGhw

      【讨论】:

        猜你喜欢
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 2012-12-14
        • 2010-12-16
        • 2015-04-23
        • 1970-01-01
        相关资源
        最近更新 更多