Di seguito ancora la classe class.smtp.php

Codice PHP:
        # ok all the message data has been sent so lets get this
        # over with aleady
        
fputs($this->smtp_conn$this->CRLF "." $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 250) {
            
$this->error =
                array(
"error" => "DATA not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }
        return 
true;
    }

    
/**
     * Expand takes the name and asks the server to list all the
     * people who are members of the _list_. Expand will return
     * back and array of the result or false if an error occurs.
     * Each value in the array returned has the format of:
     *     [ <full-name> <sp> ] <path>
     * The definition of <path> is defined in rfc 821
     *
     * Implements rfc 821: EXPN <SP> <string> <CRLF>
     *
     * SMTP CODE SUCCESS: 250
     * SMTP CODE FAILURE: 550
     * SMTP CODE ERROR  : 500,501,502,504,421
     * @access public
     * @return string array
     */
    
function Expand($name) {
        
$this->error null# so no confusion is caused

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Expand() without being connected");
            return 
false;
        }

        
fputs($this->smtp_conn,"EXPN " $name $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 250) {
            
$this->error =
                array(
"error" => "EXPN not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }

        
# parse the reply and place in our array to return to user
        
$entries explode($this->CRLF,$rply);
        while(list(,
$l) = @each($entries)) {
            
$list[] = substr($l,4);
        }

        return 
$list;
    }

    
/**
     * Sends the HELO command to the smtp server.
     * This makes sure that we and the server are in
     * the same known state.
     *
     * Implements from rfc 821: HELO <SP> <domain> <CRLF>
     *
     * SMTP CODE SUCCESS: 250
     * SMTP CODE ERROR  : 500, 501, 504, 421
     * @access public
     * @return bool
     */
    
function Hello($host="") {
        
$this->error null# so no confusion is caused

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Hello() without being connected");
            return 
false;
        }

        
# if a hostname for the HELO wasn't specified determine
        # a suitable one to send
        
if(empty($host)) {
            
# we need to determine some sort of appopiate default
            # to send to the server
            
$host "localhost";
        }

        
// Send extended hello first (RFC 2821)
        
if(!$this->SendHello("EHLO"$host))
        {
            if(!
$this->SendHello("HELO"$host))
                return 
false;
        }

        return 
true;
    }

    
/**
     * Sends a HELO/EHLO command.
     * @access private
     * @return bool
     */
    
function SendHello($hello$host) {
        
fputs($this->smtp_conn$hello " " $host $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER: " $this->CRLF $rply;
        }

        if(
$code != 250) {
            
$this->error =
                array(
"error" => $hello " not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }

        
$this->helo_rply $rply;
        
        return 
true;
    }

    
/**
     * Gets help information on the keyword specified. If the keyword
     * is not specified then returns generic help, ussually contianing
     * A list of keywords that help is available on. This function
     * returns the results back to the user. It is up to the user to
     * handle the returned data. If an error occurs then false is
     * returned with $this->error set appropiately.
     *
     * Implements rfc 821: HELP [ <SP> <string> ] <CRLF>
     *
     * SMTP CODE SUCCESS: 211,214
     * SMTP CODE ERROR  : 500,501,502,504,421
     * @access public
     * @return string
     */
    
function Help($keyword="") {
        
$this->error null# to avoid confusion

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Help() without being connected");
            return 
false;
        }

        
$extra "";
        if(!empty(
$keyword)) {
            
$extra " " $keyword;
        }

        
fputs($this->smtp_conn,"HELP" $extra $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 211 && $code != 214) {
            
$this->error =
                array(
"error" => "HELP not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }

        return 
$rply;
    }

    
/**
     * Starts a mail transaction from the email address specified in
     * $from. Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more Recipient
     * commands may be called followed by a Data command.
     *
     * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
     *
     * SMTP CODE SUCCESS: 250
     * SMTP CODE SUCCESS: 552,451,452
     * SMTP CODE SUCCESS: 500,501,421
     * @access public
     * @return bool
     */
    
function Mail($from) {
        
$this->error null# so no confusion is caused

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Mail() without being connected");
            return 
false;
        }

        
fputs($this->smtp_conn,"MAIL FROM:<" $from ">" $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 250) {
            
$this->error =
                array(
"error" => "MAIL not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }
        return 
true;
    }

    
/**
     * Sends the command NOOP to the SMTP server.
     *
     * Implements from rfc 821: NOOP <CRLF>
     *
     * SMTP CODE SUCCESS: 250
     * SMTP CODE ERROR  : 500, 421
     * @access public
     * @return bool
     */
    
function Noop() {
        
$this->error null# so no confusion is caused

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Noop() without being connected");
            return 
false;
        }

        
fputs($this->smtp_conn,"NOOP" $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 250) {
            
$this->error =
                array(
"error" => "NOOP not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }
        return 
true;
    }

    
/**
     * Sends the quit command to the server and then closes the socket
     * if there is no error or the $close_on_error argument is true.
     *
     * Implements from rfc 821: QUIT <CRLF>
     *
     * SMTP CODE SUCCESS: 221
     * SMTP CODE ERROR  : 500
     * @access public
     * @return bool
     */
    
function Quit($close_on_error=true) {
        
$this->error null# so there is no confusion

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Quit() without being connected");
            return 
false;
        }

        
# send the quit command to the server
        
fputs($this->smtp_conn,"quit" $this->CRLF);

        
# get any good-bye messages
        
$byemsg $this->get_lines();

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $byemsg;
        }

        
$rval true;
        
$e null;

        
$code substr($byemsg,0,3);
        if(
$code != 221) {
            
# use e as a tmp var cause Close will overwrite $this->error
            
$e = array("error" => "SMTP server rejected quit command",
                       
"smtp_code" => $code,
                       
"smtp_rply" => substr($byemsg,4));
            
$rval false;
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $e["error"] . ": " .
                         
$byemsg $this->CRLF;
            }
        }

        if(empty(
$e) || $close_on_error) {
            
$this->Close();
        }

        return 
$rval;
    }

    
/**
     * Sends the command RCPT to the SMTP server with the TO: argument of $to.
     * Returns true if the recipient was accepted false if it was rejected.
     *
     * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
     *
     * SMTP CODE SUCCESS: 250,251
     * SMTP CODE FAILURE: 550,551,552,553,450,451,452
     * SMTP CODE ERROR  : 500,501,503,421
     * @access public
     * @return bool
     */
    
function Recipient($to) {
        
$this->error null# so no confusion is caused

        
if(!$this->connected()) {
            
$this->error = array(
                    
"error" => "Called Recipient() without being connected");
            return 
false;
        }

        
fputs($this->smtp_conn,"RCPT TO:<" $to ">" $this->CRLF);

        
$rply $this->get_lines();
        
$code substr($rply,0,3);

        if(
$this->do_debug >= 2) {
            echo 
"SMTP -> FROM SERVER:" $this->CRLF $rply;
        }

        if(
$code != 250 && $code != 251) {
            
$this->error =
                array(
"error" => "RCPT not accepted from server",
                      
"smtp_code" => $code,
                      
"smtp_msg" => substr($rply,4));
            if(
$this->do_debug >= 1) {
                echo 
"SMTP -> ERROR: " $this->error["error"] .
                         
": " $rply $this->CRLF;
            }
            return 
false;
        }
        return 
true;
    }