3v4l.org

run code in 300+ PHP versions simultaneously
<?php // the email to validate $email = 'user@example.com'; // an optional sender $sender = 'user@mydomain.com'; // instantiate the class $SMTP_Validator = new SMTP_validateEmail(); // turn on debugging if you want to view the SMTP transaction $SMTP_Validator->debug = true; // do the validation $results = $SMTP_Validator->validate(array($email), $sender); // view results echo $email.' is '.($results[$email] ? 'valid' : 'invalid')."\n"; // send email? if ($results[$email]) { //mail($email, 'Confirm Email', 'Please reply to this email to confirm', 'From:'.$sender."\r\n"); //send email echo 'VALID EMAIL!'; } else { echo 'The email addresses you entered is not valid'; } /** * 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); 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); } else { $this->debug('Error: Could not connect to a valid mail server for this email address: ' . $user.'@'.$domain); } } 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 entriesg * @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>'; } } }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 16, Position 2 = 18
Branch analysis from position: 16
1 jumps found. (Code = 42) Position 1 = 19
Branch analysis from position: 19
2 jumps found. (Code = 43) Position 1 = 24, Position 2 = 26
Branch analysis from position: 24
1 jumps found. (Code = 42) Position 1 = 27
Branch analysis from position: 27
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 26
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 18
2 jumps found. (Code = 43) Position 1 = 24, Position 2 = 26
Branch analysis from position: 24
Branch analysis from position: 26
filename:       /in/tsVY4
function name:  (null)
number of ops:  28
compiled vars:  !0 = $email, !1 = $sender, !2 = $SMTP_Validator, !3 = $results
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   ASSIGN                                                   !0, 'user%40example.com'
    6     1        ASSIGN                                                   !1, 'user%40mydomain.com'
    8     2        NEW                                              $6      'SMTP_validateEmail'
          3        DO_FCALL                                      0          
          4        ASSIGN                                                   !2, $6
   10     5        ASSIGN_OBJ                                               !2, 'debug'
          6        OP_DATA                                                  <true>
   12     7        INIT_METHOD_CALL                                         !2, 'validate'
          8        INIT_ARRAY                                       ~10     !0
          9        SEND_VAL_EX                                              ~10
         10        SEND_VAR_EX                                              !1
         11        DO_FCALL                                      0  $11     
         12        ASSIGN                                                   !3, $11
   14    13        CONCAT                                           ~13     !0, '+is+'
         14        FETCH_DIM_R                                      ~14     !3, !0
         15      > JMPZ                                                     ~14, ->18
         16    >   QM_ASSIGN                                        ~15     'valid'
         17      > JMP                                                      ->19
         18    >   QM_ASSIGN                                        ~15     'invalid'
         19    >   CONCAT                                           ~16     ~13, ~15
         20        CONCAT                                           ~17     ~16, '%0A'
         21        ECHO                                                     ~17
   17    22        FETCH_DIM_R                                      ~18     !3, !0
         23      > JMPZ                                                     ~18, ->26
   19    24    >   ECHO                                                     'VALID+EMAIL%21'
         25      > JMP                                                      ->27
   21    26    >   ECHO                                                     'The+email+addresses+you+entered+is+not+valid'
  305    27    > > RETURN                                                   1

Class SMTP_validateEmail:
Function smtp_validateemail:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 3, Position 2 = 6
Branch analysis from position: 3
2 jumps found. (Code = 43) Position 1 = 7, Position 2 = 10
Branch analysis from position: 7
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 10
Branch analysis from position: 6
filename:       /in/tsVY4
function name:  SMTP_validateEmail
number of ops:  11
compiled vars:  !0 = $emails, !1 = $sender
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  101     0  E >   RECV_INIT                                        !0      <false>
          1        RECV_INIT                                        !1      <false>
  102     2      > JMPZ                                                     !0, ->6
  103     3    >   INIT_METHOD_CALL                                         'setEmails'
          4        SEND_VAR_EX                                              !0
          5        DO_FCALL                                      0          
  105     6    > > JMPZ                                                     !1, ->10
  106     7    >   INIT_METHOD_CALL                                         'setSenderEmail'
          8        SEND_VAR_EX                                              !1
          9        DO_FCALL                                      0          
  108    10    > > RETURN                                                   null

End of function smtp_validateemail

Function _parseemail:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/tsVY4
function name:  _parseEmail
number of ops:  19
compiled vars:  !0 = $email, !1 = $parts, !2 = $domain, !3 = $user
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  110     0  E >   RECV                                             !0      
  111     1        INIT_FCALL                                               'explode'
          2        SEND_VAL                                                 '%40'
          3        SEND_VAR                                                 !0
          4        DO_ICALL                                         $4      
          5        ASSIGN                                                   !1, $4
  112     6        INIT_FCALL                                               'array_pop'
          7        SEND_REF                                                 !1
          8        DO_ICALL                                         $6      
          9        ASSIGN                                                   !2, $6
  113    10        INIT_FCALL                                               'implode'
         11        SEND_VAL                                                 '%40'
         12        SEND_VAR                                                 !1
         13        DO_ICALL                                         $8      
         14        ASSIGN                                                   !3, $8
  114    15        INIT_ARRAY                                       ~10     !3
         16        ADD_ARRAY_ELEMENT                                ~10     !2
         17      > RETURN                                                   ~10
  115    18*     > RETURN                                                   null

End of function _parseemail

Function setemails:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 2, Position 2 = 23
Branch analysis from position: 2
2 jumps found. (Code = 78) Position 1 = 3, Position 2 = 23
Branch analysis from position: 3
2 jumps found. (Code = 43) Position 1 = 15, Position 2 = 18
Branch analysis from position: 15
1 jumps found. (Code = 42) Position 1 = 2
Branch analysis from position: 2
Branch analysis from position: 18
Branch analysis from position: 23
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 23
filename:       /in/tsVY4
function name:  setEmails
number of ops:  25
compiled vars:  !0 = $emails, !1 = $email, !2 = $user, !3 = $domain
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  121     0  E >   RECV                                             !0      
  122     1      > FE_RESET_R                                       $4      !0, ->23
          2    > > FE_FETCH_R                                               $4, !1, ->23
  123     3    >   INIT_METHOD_CALL                                         '_parseEmail'
          4        SEND_VAR_EX                                              !1
          5        DO_FCALL                                      0  $5      
          6        FETCH_LIST_R                                     $6      $5, 0
          7        ASSIGN                                                   !2, $6
          8        FETCH_LIST_R                                     $8      $5, 1
          9        ASSIGN                                                   !3, $8
         10        FREE                                                     $5
  124    11        FETCH_OBJ_IS                                     ~10     'domains'
         12        ISSET_ISEMPTY_DIM_OBJ                         0  ~11     ~10, !3
         13        BOOL_NOT                                         ~12     ~11
         14      > JMPZ                                                     ~12, ->18
  125    15    >   FETCH_OBJ_W                                      $13     'domains'
         16        ASSIGN_DIM                                               $13, !3
         17        OP_DATA                                                  <array>
  127    18    >   FETCH_OBJ_W                                      $15     'domains'
         19        FETCH_DIM_W                                      $16     $15, !3
         20        ASSIGN_DIM                                               $16
         21        OP_DATA                                                  !2
  122    22      > JMP                                                      ->2
         23    >   FE_FREE                                                  $4
  129    24      > RETURN                                                   null

End of function setemails

Function setsenderemail:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/tsVY4
function name:  setSenderEmail
number of ops:  12
compiled vars:  !0 = $email, !1 = $parts
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  135     0  E >   RECV                                             !0      
  136     1        INIT_METHOD_CALL                                         '_parseEmail'
          2        SEND_VAR_EX                                              !0
          3        DO_FCALL                                      0  $2      
          4        ASSIGN                                                   !1, $2
  137     5        FETCH_DIM_R                                      ~5      !1, 0
          6        ASSIGN_OBJ                                               'from_user'
          7        OP_DATA                                                  ~5
  138     8        FETCH_DIM_R                                      ~7      !1, 1
          9        ASSIGN_OBJ                                               'from_domain'
         10        OP_DATA                                                  ~7
  139    11      > RETURN                                                   null

End of function setsenderemail

Function validate:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 7
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 11
Branch analysis from position: 8
2 jumps found. (Code = 77) Position 1 = 13, Position 2 = 199
Branch analysis from position: 13
2 jumps found. (Code = 78) Position 1 = 14, Position 2 = 199
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 33
Branch analysis from position: 33
2 jumps found. (Code = 44) Position 1 = 36, Position 2 = 28
Branch analysis from position: 36
1 jumps found. (Code = 42) Position 1 = 80
Branch analysis from position: 80
2 jumps found. (Code = 44) Position 1 = 86, Position 2 = 52
Branch analysis from position: 86
2 jumps found. (Code = 43) Position 1 = 88, Position 2 = 192
Branch analysis from position: 88
2 jumps found. (Code = 43) Position 1 = 106, Position 2 = 109
Branch analysis from position: 106
1 jumps found. (Code = 42) Position 1 = 110
Branch analysis from position: 110
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 122
Branch analysis from position: 113
2 jumps found. (Code = 77) Position 1 = 114, Position 2 = 120
Branch analysis from position: 114
2 jumps found. (Code = 78) Position 1 = 115, Position 2 = 120
Branch analysis from position: 115
1 jumps found. (Code = 42) Position 1 = 114
Branch analysis from position: 114
Branch analysis from position: 120
1 jumps found. (Code = 42) Position 1 = 13
Branch analysis from position: 13
Branch analysis from position: 120
Branch analysis from position: 122
2 jumps found. (Code = 77) Position 1 = 137, Position 2 = 180
Branch analysis from position: 137
2 jumps found. (Code = 78) Position 1 = 138, Position 2 = 180
Branch analysis from position: 138
2 jumps found. (Code = 43) Position 1 = 153, Position 2 = 156
Branch analysis from position: 153
1 jumps found. (Code = 42) Position 1 = 157
Branch analysis from position: 157
2 jumps found. (Code = 43) Position 1 = 160, Position 2 = 165
Branch analysis from position: 160
1 jumps found. (Code = 42) Position 1 = 179
Branch analysis from position: 179
1 jumps found. (Code = 42) Position 1 = 137
Branch analysis from position: 137
Branch analysis from position: 165
2 jumps found. (Code = 47) Position 1 = 167, Position 2 = 169
Branch analysis from position: 167
2 jumps found. (Code = 43) Position 1 = 170, Position 2 = 175
Branch analysis from position: 170
1 jumps found. (Code = 42) Position 1 = 179
Branch analysis from position: 179
Branch analysis from position: 175
1 jumps found. (Code = 42) Position 1 = 137
Branch analysis from position: 137
Branch analysis from position: 169
Branch analysis from position: 156
2 jumps found. (Code = 43) Position 1 = 160, Position 2 = 165
Branch analysis from position: 160
Branch analysis from position: 165
Branch analysis from position: 180
1 jumps found. (Code = 42) Position 1 = 198
Branch analysis from position: 198
1 jumps found. (Code = 42) Position 1 = 13
Branch analysis from position: 13
Branch analysis from position: 180
Branch analysis from position: 109
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 122
Branch analysis from position: 113
Branch analysis from position: 122
Branch analysis from position: 192
1 jumps found. (Code = 42) Position 1 = 13
Branch analysis from position: 13
Branch analysis from position: 52
2 jumps found. (Code = 43) Position 1 = 73, Position 2 = 80
Branch analysis from position: 73
1 jumps found. (Code = 42) Position 1 = 86
Branch analysis from position: 86
Branch analysis from position: 80
Branch analysis from position: 28
2 jumps found. (Code = 44) Position 1 = 36, Position 2 = 28
Branch analysis from position: 36
Branch analysis from position: 28
Branch analysis from position: 199
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 199
Branch analysis from position: 11
Branch analysis from position: 7
filename:       /in/tsVY4
function name:  validate
number of ops:  202
compiled vars:  !0 = $emails, !1 = $sender, !2 = $results, !3 = $users, !4 = $domain, !5 = $mxs, !6 = $hosts, !7 = $mxweights, !8 = $n, !9 = $timeout, !10 = $host, !11 = $errno, !12 = $errstr, !13 = $reply, !14 = $matches, !15 = $code, !16 = $user
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
  147     0  E >   RECV_INIT                                        !0      <false>
          1        RECV_INIT                                        !1      <false>
  149     2        ASSIGN                                                   !2, <array>
  151     3      > JMPZ                                                     !0, ->7
  152     4    >   INIT_METHOD_CALL                                         'setEmails'
          5        SEND_VAR_EX                                              !0
          6        DO_FCALL                                      0          
  154     7    > > JMPZ                                                     !1, ->11
  155     8    >   INIT_METHOD_CALL                                         'setSenderEmail'
          9        SEND_VAR_EX                                              !1
         10        DO_FCALL                                      0          
  159    11    >   FETCH_OBJ_R                                      ~20     'domains'
         12      > FE_RESET_R                                       $21     ~20, ->199
         13    > > FE_FETCH_R                                       ~22     $21, !3, ->199
         14    >   ASSIGN                                                   !4, ~22
  161    15        ASSIGN                                                   !5, <array>
  164    16        ASSIGN_OBJ                                               'domain'
         17        OP_DATA                                                  !4
  167    18        INIT_METHOD_CALL                                         'queryMX'
         19        SEND_VAR_EX                                              !4
         20        DO_FCALL                                      0  $26     
         21        FETCH_LIST_R                                     $27     $26, 0
         22        ASSIGN                                                   !6, $27
         23        FETCH_LIST_R                                     $29     $26, 1
         24        ASSIGN                                                   !7, $29
         25        FREE                                                     $26
  170    26        ASSIGN                                                   !8, 0
         27      > JMP                                                      ->33
  171    28    >   FETCH_DIM_R                                      ~32     !6, !8
         29        FETCH_DIM_R                                      ~34     !7, !8
         30        ASSIGN_DIM                                               !5, ~32
         31        OP_DATA                                                  ~34
  170    32        PRE_INC                                                  !8
         33    >   COUNT                                            ~36     !6
         34        IS_SMALLER                                               !8, ~36
         35      > JMPNZ                                                    ~37, ->28
  173    36    >   INIT_FCALL                                               'asort'
         37        SEND_REF                                                 !5
         38        DO_ICALL                                                 
  176    39        FETCH_OBJ_R                                      ~39     'domain'
         40        ASSIGN_DIM                                               !5, ~39
         41        OP_DATA                                                  0
  178    42        INIT_METHOD_CALL                                         'debug'
         43        INIT_FCALL                                               'print_r'
         44        SEND_VAR                                                 !5
         45        SEND_VAL                                                 1
         46        DO_ICALL                                         $41     
         47        SEND_VAR_NO_REF_EX                                       $41
         48        DO_FCALL                                      0          
  180    49        FETCH_OBJ_R                                      ~43     'max_conn_time'
         50        ASSIGN                                                   !9, ~43
  183    51      > JMP                                                      ->80
  185    52    >   INIT_METHOD_CALL                                         'debug'
         53        ROPE_INIT                                     5  ~47     'try+'
         54        ROPE_ADD                                      1  ~47     ~47, !10
         55        ROPE_ADD                                      2  ~47     ~47, '%3A'
         56        FETCH_OBJ_R                                      ~45     'port'
         57        ROPE_ADD                                      3  ~47     ~47, ~45
         58        ROPE_END                                      4  ~46     ~47, '%0A'
         59        SEND_VAL_EX                                              ~46
         60        DO_FCALL                                      0          
  186    61        INIT_FCALL                                               'fsockopen'
         62        SEND_VAR                                                 !10
         63        FETCH_OBJ_R                                      ~52     'port'
         64        SEND_VAL                                                 ~52
         65        SEND_REF                                                 !11
         66        SEND_REF                                                 !12
         67        CAST                                          5  ~53     !9
         68        SEND_VAL                                                 ~53
         69        DO_ICALL                                         $54     
         70        ASSIGN_OBJ                                       ~51     'sock'
         71        OP_DATA                                                  $54
         72      > JMPZ                                                     ~51, ->80
  187    73    >   INIT_FCALL                                               'stream_set_timeout'
         74        FETCH_OBJ_R                                      ~55     'sock'
         75        SEND_VAL                                                 ~55
         76        FETCH_OBJ_R                                      ~56     'max_read_time'
         77        SEND_VAL                                                 ~56
         78        DO_ICALL                                                 
  188    79      > JMP                                                      ->86
  183    80    >   INIT_FCALL_BY_NAME                                       'each'
         81        SEND_VAR_EX                                              !5
         82        DO_FCALL                                      0  $58     
         83        FETCH_LIST_R                                     $59     $58, 0
         84        ASSIGN                                                   !10, $59
         85      > JMPNZ                                                    $58, ->52
  193    86    >   FETCH_OBJ_R                                      ~61     'sock'
         87      > JMPZ                                                     ~61, ->192
  194    88    >   INIT_FCALL                                               'fread'
         89        FETCH_OBJ_R                                      ~62     'sock'
         90        SEND_VAL                                                 ~62
         91        SEND_VAL                                                 2082
         92        DO_ICALL                                         $63     
         93        ASSIGN                                                   !13, $63
  195    94        INIT_METHOD_CALL                                         'debug'
         95        NOP                                                      
         96        FAST_CONCAT                                      ~65     '%3C%3C%3C%0A', !13
         97        SEND_VAL_EX                                              ~65
         98        DO_FCALL                                      0          
  197    99        INIT_FCALL                                               'preg_match'
        100        SEND_VAL                                                 '%2F%5E%28%5B0-9%5D%7B3%7D%29+%2Fims'
        101        SEND_VAR                                                 !13
        102        SEND_REF                                                 !14
        103        DO_ICALL                                                 
  198   104        ISSET_ISEMPTY_DIM_OBJ                         0          !14, 1
        105      > JMPZ                                                     ~68, ->109
        106    >   FETCH_DIM_R                                      ~69     !14, 1
        107        QM_ASSIGN                                        ~70     ~69
        108      > JMP                                                      ->110
        109    >   QM_ASSIGN                                        ~70     ''
        110    >   ASSIGN                                                   !15, ~70
  200   111        IS_NOT_EQUAL                                             !15, '220'
        112      > JMPZ                                                     ~72, ->122
  202   113    > > FE_RESET_R                                       $73     !3, ->120
        114    > > FE_FETCH_R                                               $73, !16, ->120
  203   115    >   CONCAT                                           ~74     !16, '%40'
        116        CONCAT                                           ~75     ~74, !4
        117        ASSIGN_DIM                                               !2, ~75
        118        OP_DATA                                                  <false>
  202   119      > JMP                                                      ->114
        120    >   FE_FREE                                                  $73
  205   121      > JMP                                                      ->13
  209   122    >   INIT_METHOD_CALL                                         'send'
        123        FETCH_OBJ_R                                      ~77     'from_domain'
        124        CONCAT                                           ~78     'HELO+', ~77
        125        SEND_VAL_EX                                              ~78
        126        DO_FCALL                                      0          
  211   127        INIT_METHOD_CALL                                         'send'
        128        FETCH_OBJ_R                                      ~80     'from_user'
        129        CONCAT                                           ~81     'MAIL+FROM%3A+%3C', ~80
        130        CONCAT                                           ~82     ~81, '%40'
        131        FETCH_OBJ_R                                      ~83     'from_domain'
        132        CONCAT                                           ~84     ~82, ~83
        133        CONCAT                                           ~85     ~84, '%3E'
        134        SEND_VAL_EX                                              ~85
        135        DO_FCALL                                      0          
  214   136      > FE_RESET_R                                       $87     !3, ->180
        137    > > FE_FETCH_R                                               $87, !16, ->180
  217   138    >   INIT_METHOD_CALL                                         'send'
        139        CONCAT                                           ~88     'RCPT+TO%3A+%3C', !16
        140        CONCAT                                           ~89     ~88, '%40'
        141        CONCAT                                           ~90     ~89, !4
        142        CONCAT                                           ~91     ~90, '%3E'
        143        SEND_VAL_EX                                              ~91
        144        DO_FCALL                                      0  $92     
        145        ASSIGN                                                   !13, $92
  220   146        INIT_FCALL                                               'preg_match'
        147        SEND_VAL                                                 '%2F%5E%28%5B0-9%5D%7B3%7D%29+%2Fims'
        148        SEND_VAR                                                 !13
        149        SEND_REF                                                 !14
        150        DO_ICALL                                                 
  221   151        ISSET_ISEMPTY_DIM_OBJ                         0          !14, 1
        152      > JMPZ                                                     ~95, ->156
        153    >   FETCH_DIM_R                                      ~96     !14, 1
        154        QM_ASSIGN                                        ~97     ~96
        155      > JMP                                                      ->157
        156    >   QM_ASSIGN                                        ~97     ''
        157    >   ASSIGN                                                   !15, ~97
  223   158        IS_EQUAL                                                 !15, '250'
        159      > JMPZ                                                     ~99, ->165
  225   160    >   CONCAT                                           ~100    !16, '%40'
        161        CONCAT                                           ~101    ~100, !4
        162        ASSIGN_DIM                                               !2, ~101
        163        OP_DATA                                                  <true>
        164      > JMP                                                      ->179
  226   165    >   IS_EQUAL                                         ~103    !15, '451'
        166      > JMPNZ_EX                                         ~103    ~103, ->169
        167    >   IS_EQUAL                                         ~104    !15, '452'
        168        BOOL                                             ~103    ~104
        169    > > JMPZ                                                     ~103, ->175
  228   170    >   CONCAT                                           ~105    !16, '%40'
        171        CONCAT                                           ~106    ~105, !4
        172        ASSIGN_DIM                                               !2, ~106
        173        OP_DATA                                                  <true>
        174      > JMP                                                      ->179
  230   175    >   CONCAT                                           ~108    !16, '%40'
        176        CONCAT                                           ~109    ~108, !4
        177        ASSIGN_DIM                                               !2, ~109
        178        OP_DATA                                                  <false>
  214   179    > > JMP                                                      ->137
        180    >   FE_FREE                                                  $87
  236   181        INIT_METHOD_CALL                                         'send'
        182        SEND_VAL_EX                                              'RSET'
        183        DO_FCALL                                      0          
  239   184        INIT_METHOD_CALL                                         'send'
        185        SEND_VAL_EX                                              'quit'
        186        DO_FCALL                                      0          
  241   187        INIT_FCALL                                               'fclose'
        188        FETCH_OBJ_R                                      ~113    'sock'
        189        SEND_VAL                                                 ~113
        190        DO_ICALL                                                 
        191      > JMP                                                      ->198
  244   192    >   INIT_METHOD_CALL                                         'debug'
        193        CONCAT                                           ~115    'Error%3A+Could+not+connect+to+a+valid+mail+server+for+this+email+address%3A+', !16
        194        CONCAT                                           ~116    ~115, '%40'
        195        CONCAT                                           ~117    ~116, !4
        196        SEND_VAL_EX                                              ~117
        197        DO_FCALL                                      0          
  159   198    > > JMP                                                      ->13
        199    >   FE_FREE                                                  $21
  247   200      > RETURN                                                   !2
  248   201*     

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
174.02 ms | 1428 KiB | 36 Q