将PHP电子邮件验证转换为C# [英] Convert PHP email verification to C#

查看:68
本文介绍了将PHP电子邮件验证转换为C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下午好.谁能将以下PHP代码转换为C#?

Good afternoon. Can anyone convert the following PHP code to C#?

<?php

 /**
 * Validate Email Addresses Via SMTP
 * This queries the SMTP server to see if the email address is accepted.
 * @copyright http://creativecommons.org/licenses/by/2.0/ - Please keep this comment intact
 * @author gabe@fijiwebdesign.com
 * @contributers adnan@barakatdesigns.net
 * @version 0.1a
 */
class SMTP_validateEmail {

 /**
  * PHP Socket resource to remote MTA
  * @var resource $sock
  */
 var $sock;

 /**
  * Current User being validated
  */
 var $user;
 /**
  * Current domain where user is being validated
  */
 var $domain;
 /**
  * List of domains to validate users on
  */
 var $domains;
 /**
  * SMTP Port
  */
 var $port = 25;
 /**
  * Maximum Connection Time to wait for connection establishment per MTA
  */
 var $max_conn_time = 30;
 /**
  * Maximum time to read from socket before giving up
  */
 var $max_read_time = 5;

 /**
  * username of sender
  */
 var $from_user = 'user';
 /**
  * Host Name of sender
  */
 var $from_domain = 'localhost';

 /**
  * Nameservers to use when make DNS query for MX entries
  * @var Array $nameservers
  */
 var $nameservers = array(
        '192.168.0.1'
);

 var $debug = false;

 /**
  * Initializes the Class
  * @return SMTP_validateEmail Instance
  * @param $email Array[optional] List of Emails to Validate
  * @param $sender String[optional] Email of validator
  */
 function SMTP_validateEmail($emails = false, $sender = false) {
  if ($emails) {
   $this->setEmails($emails);
  }
  if ($sender) {
   $this->setSenderEmail($sender);
  }
 }

 function _parseEmail($email) {
        $parts = explode('@', $email);
        $domain = array_pop($parts);
        $user= implode('@', $parts);
        return array($user, $domain);
 }

 /**
  * Set the Emails to validate
  * @param $emails Array List of Emails
  */
 function setEmails($emails) {
        foreach($emails as $email) {
                list($user, $domain) = $this->_parseEmail($email);
                if (!isset($this->domains[$domain])) {
                         $this->domains[$domain] = array();
                }
                $this->domains[$domain][] = $user;
        }
 }

 /**
  * Set the Email of the sender/validator
  * @param $email String
  */
 function setSenderEmail($email) {
        $parts = $this->_parseEmail($email);
        $this->from_user = $parts[0];
        $this->from_domain = $parts[1];
 }

 /**
 * Validate Email Addresses
 * @param String $emails Emails to validate (recipient emails)
 * @param String $sender Sender's Email
 * @return Array Associative List of Emails and their validation results
 */
 function validate($emails = false, $sender = false) {

  $results = array();

  if ($emails) {
   $this->setEmails($emails);
  }
  if ($sender) {
   $this->setSenderEmail($sender);
  }

  // query the MTAs on each Domain
  foreach($this->domains as $domain=>$users) {

         $mxs = array();

         // current domain being queried
         $this->domain = $domain;

          // retrieve SMTP Server via MX query on domain
          list($hosts, $mxweights) = $this->queryMX($domain);

          // retrieve MX priorities
          for($n=0; $n < count($hosts); $n++){
           $mxs[$hosts[$n]] = $mxweights[$n];
          }
          asort($mxs);

          // last fallback is the original domain
          $mxs[$this->domain] = 0;

          $this->debug(print_r($mxs, 1));

          $timeout = $this->max_conn_time;

          // try each host
          while(list($host) = each($mxs)) {
           // connect to SMTP server
           $this->debug("try $host:$this->port\n");
           if ($this->sock = fsockopen($host, $this->port, $errno, $errstr, (float) $timeout)) {
            stream_set_timeout($this->sock, $this->max_read_time);
            break;
           }
          }

          // did we get a TCP socket
          if ($this->sock) {
           $reply = fread($this->sock, 2082);
           $this->debug("<<<\n$reply");

           preg_match('/^([0-9]{3}) /ims', $reply, $matches);
           $code = isset($matches[1]) ? $matches[1] : '';

           if($code != '220') {
            // MTA gave an error...
            foreach($users as $user) {
                $results[$user.'@'.$domain] = false;
                }
                continue;
           }

           // say helo
           $this->send("HELO ".$this->from_domain);
           // tell of sender
           $this->send("MAIL FROM: <".$this->from_user.'@'.$this->from_domain.">");

           // ask for each recepient on this domain
           foreach($users as $user) {

                   // ask of recepient
                   $reply = $this->send("RCPT TO: <".$user.'@'.$domain.">");

                    // get code and msg from response
                   preg_match('/^([0-9]{3}) /ims', $reply, $matches);
                   $code = isset($matches[1]) ? $matches[1] : '';

                   if ($code == '250') {
                    // you received 250 so the email address was accepted
                    $results[$user.'@'.$domain] = true;
                   } elseif ($code == '451' || $code == '452') {
                        // you received 451 so the email address was greylisted (or some temporary error occured on the MTA) - so assume is ok
                        $results[$user.'@'.$domain] = true;
                   } else {
                        $results[$user.'@'.$domain] = false;
                   }

           }

           // reset before quit
           $this->send("RSET");

           // quit
           $this->send("quit");
           // close socket
           fclose($this->sock);

          }
        }
        return $results;
 }



 function send($msg) {
  fwrite($this->sock, $msg."\r\n");

  $reply = fread($this->sock, 2082);

  $this->debug(">>>\n$msg\n");
  $this->debug("<<<\n$reply");

  return $reply;
 }

 /**
  * Query DNS server for MX entries
  * @return
  */
 function queryMX($domain) {
        $hosts = array();
        $mxweights = array();
        if (function_exists('getmxrr')) {
                getmxrr($domain, $hosts, $mxweights);
        } else {
                // windows, we need Net_DNS
                require_once 'Net/DNS.php';

                $resolver = new Net_DNS_Resolver();
                $resolver->debug = $this->debug;
                // nameservers to query
                $resolver->nameservers = $this->nameservers;
                $resp = $resolver->query($domain, 'MX');
                if ($resp) {
                        foreach($resp->answer as $answer) {
                                $hosts[] = $answer->exchange;
                                $mxweights[] = $answer->preference;
                        }
                }

        }
        return array($hosts, $mxweights);
 }

 /**
  * Simple function to replicate PHP 5 behaviour. http://php.net/microtime
  */
 function microtime_float() {
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
 }

 function debug($str) {
  if ($this->debug) {
   echo '<pre>'.htmlentities($str).'</pre>';
  }
 }

}


?>


谢谢,WHEELS

仅将代码块校正为一组< pre>代码块.标签-检查是否粘贴,因为您可以像设置的那样设置自动检测"选项,因此可以嵌套它们. -OriginalGriff [/edit]


Thank you, WHEELS

[edit]Code block corrected to only one set of <pre> tags - check when you paste as you can nest them if you have the "auto detect" option set, as you do have. - OriginalGriff[/edit]

推荐答案

袜子 */ var
sock */ var


袜子; /* * *当前用户正在验证 */ var
sock; /** * Current User being validated */ var


user ; /* * *正在验证用户的当前域 */ var
user; /** * Current domain where user is being validated */ var


这篇关于将PHP电子邮件验证转换为C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆