【问题标题】:How to, using PHP, ping an SMTP server and check MX records?如何使用 PHP ping SMTP 服务器并检查 MX 记录?
【发布时间】:2011-06-09 01:34:00
【问题描述】:

如何使用 PHP ping SMTP 服务器并检查 MX 记录?我愿意编写一个脚本,例如可以在http://bit.ly/z4RE 上找到的脚本

我使用aaa@mailinator.com 作为测试邮件,这是更易于阅读的格式:

Result: Ok

Log:
MX record about mailinator.com exists.
Connection succeeded to mailinator.com SMTP.
220 mail.sogetthis.com ESMTP Postfix
> HELO verify-email.org
250 Hello
> MAIL FROM: <check@verify-email.org>
=250 OK
> RCPT TO: <aaa@mailinator.com>
=250 OK

我知道必须在服务器上打开 25 端口。

【问题讨论】:

    标签: php smtp mx-record


    【解决方案1】:

    您可以通过dns_get_record()检索MX记录:

    $rr = dns_get_record('example.com',DNS_MX);
    

    我不确定,您所说的“ping”SMTP 服务器是什么意思?也许发邮件?您可以通过 PEAR 的Mail_MIME 来做到这一点。

    【讨论】:

      【解决方案2】:

      要获取与给定 Internet 主机名对应的 MX 记录,您可以使用getmxrr

      bool getmxrr ( string $hostname , array &$mxhosts [, array &$weight ] )
      

      要通过 SMTP 与邮件服务器通信,可以使用PEAR'S Net_SMTP package.

      mixed Net_SMTP::vrfy ( string $string )
      

      包里还有methods for HELO, MAIL FROM and RCPT TO

      【讨论】:

        【解决方案3】:

        如何为电子邮件获取 mx 主机:

        function getMX($hostname = "boo.xx", $show = 0){
            if(dns_get_mx($hostname, $mxhosts, $weights)) {
                $i = 0;
                $mxList = NULL;
                foreach($mxhosts as $key => $host) {
                    if($show == 1) echo "Hostname: $host (Weight: {$weights[$key]}) <br>";
                    $ip = gethostbyname($host);
                    if($show == 1) echo "IP " . $ip . "\n<br>";
                    if($show == 1) echo "IP " . gethostbyaddr($ip) . "\n<br>";
                    $mxList[$i]['host'] = $host;
                    $mxList[$i]['ip'] = $ip;
                    $mxList[$i]['weight'] = $weights[$key];
                    $i++;
                }
                return $mxList;
            } else {
                echo "Could not find any MX records for $hostname\n";
            }
        }
        

        如何向 gmail 发送电子邮件:

        <?php
        // Send with smtp ssl
        // ini_set("SMTP","ssl://smtp.gmail.com");
        // ini_set("smtp_port","465");
        
        // Login email and password
        $login = "your-email@cool.xx";
        $pass = "123456";
        
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);
        error_reporting(E_ALL);
        
        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
        stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
        try{
            // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
            echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
            if (!$socket) {
                print "Failed to connect $err $errstr\n";
                return;
            }else{
                // Http
                // fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
                // Smtp
                echo fread($socket,8192);
                echo fwrite($socket, "EHLO cool.xx\r\n");
                echo fread($socket,8192);
        
                // Start tls connection
                echo fwrite($socket, "STARTTLS\r\n");
                echo fread($socket,8192);
        
                echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
        
                // Send ehlo
                echo fwrite($socket, "EHLO cool.xx\r\n");
                echo fread($socket,8192);
        
                // echo fwrite($socket, "MAIL FROM: <hello@cool.com>\r\n");
                // echo fread($socket,8192);
        
                echo fwrite($socket, "AUTH LOGIN\r\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, base64_encode($login)."\r\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, base64_encode($pass)."\r\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, "rcpt to: <to-email@boome.com>\r\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, "DATA\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\r\nSubject:Hello from php socket tls\r\n.\r\n");
                echo fread($socket,8192);
        
                echo fwrite($socket, "QUIT \n");
                echo fread($socket,8192);
        
                /* Turn off encryption for the rest */
                // stream_socket_enable_crypto($fp, false);
        
                fclose($socket);
            }
        }catch(Exception $e){
            echo $e;
        }
        

        【讨论】:

          猜你喜欢
          • 2013-03-06
          • 1970-01-01
          • 2021-08-25
          • 2011-05-19
          • 2013-04-16
          • 2023-03-14
          • 2018-12-02
          • 2010-11-08
          • 1970-01-01
          相关资源
          最近更新 更多