| 1 | 386 | Ruebenwurz | <?php
 | 
      
        | 2 | 533 | doc | /*~ class.smtp.php
 | 
      
        | 3 |  |  | .---------------------------------------------------------------------------.
 | 
      
        | 4 |  |  | |  Software: PHPMailer - PHP email class                                    |
 | 
      
        | 5 |  |  | |   Version: 2.0.0 rc1                                                      |
 | 
      
        | 6 |  |  | |   Contact: via sourceforge.net support pages (also www.codeworxtech.com)  |
 | 
      
        | 7 |  |  | |      Info: http://phpmailer.sourceforge.net                               |
 | 
      
        | 8 |  |  | |   Support: http://sourceforge.net/projects/phpmailer/                     |
 | 
      
        | 9 |  |  | | ------------------------------------------------------------------------- |
 | 
      
        | 10 |  |  | |    Author: Andy Prevost (project admininistrator)                         |
 | 
      
        | 11 |  |  | |    Author: Brent R. Matzelle (original founder)                           |
 | 
      
        | 12 |  |  | | Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved.               |
 | 
      
        | 13 |  |  | | Copyright (c) 2001-2003, Brent R. Matzelle                                |
 | 
      
        | 14 |  |  | | ------------------------------------------------------------------------- |
 | 
      
        | 15 |  |  | |   License: Distributed under the Lesser General Public License (LGPL)     |
 | 
      
        | 16 |  |  | |            http://www.gnu.org/copyleft/lesser.html                        |
 | 
      
        | 17 |  |  | | This program is distributed in the hope that it will be useful - WITHOUT  |
 | 
      
        | 18 |  |  | | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     |
 | 
      
        | 19 |  |  | | FITNESS FOR A PARTICULAR PURPOSE.                                         |
 | 
      
        | 20 |  |  | | ------------------------------------------------------------------------- |
 | 
      
        | 21 |  |  | | We offer a number of paid services (www.codeworxtech.com):                |
 | 
      
        | 22 |  |  | | - Web Hosting on highly optimized fast and secure servers                 |
 | 
      
        | 23 |  |  | | - Technology Consulting                                                   |
 | 
      
        | 24 |  |  | | - Oursourcing (highly qualified programmers and graphic designers)        |
 | 
      
        | 25 |  |  | '---------------------------------------------------------------------------'
 | 
      
        | 26 | 386 | Ruebenwurz | 
 | 
      
        | 27 |  |  | /**
 | 
      
        | 28 |  |  |  * SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
 | 
      
        | 29 |  |  |  * commands except TURN which will always return a not implemented
 | 
      
        | 30 |  |  |  * error. SMTP also provides some utility methods for sending mail
 | 
      
        | 31 |  |  |  * to an SMTP server.
 | 
      
        | 32 |  |  |  * @package PHPMailer
 | 
      
        | 33 |  |  |  * @author Chris Ryan
 | 
      
        | 34 |  |  |  */
 | 
      
        | 35 | 533 | doc | 
 | 
      
        | 36 | 386 | Ruebenwurz | class SMTP
 | 
      
        | 37 |  |  | {
 | 
      
        | 38 | 533 | doc |   /**
 | 
      
        | 39 |  |  |    *  SMTP server port
 | 
      
        | 40 |  |  |    *  @var int
 | 
      
        | 41 |  |  |    */
 | 
      
        | 42 |  |  |   var $SMTP_PORT = 25;
 | 
      
        | 43 | 386 | Ruebenwurz | 
 | 
      
        | 44 | 533 | doc |   /**
 | 
      
        | 45 |  |  |    *  SMTP reply line ending
 | 
      
        | 46 |  |  |    *  @var string
 | 
      
        | 47 |  |  |    */
 | 
      
        | 48 |  |  |   var $CRLF = "\r\n";
 | 
      
        | 49 | 386 | Ruebenwurz | 
 | 
      
        | 50 | 533 | doc |   /**
 | 
      
        | 51 |  |  |    *  Sets whether debugging is turned on
 | 
      
        | 52 |  |  |    *  @var bool
 | 
      
        | 53 |  |  |    */
 | 
      
        | 54 |  |  |   var $do_debug;       # the level of debug to perform
 | 
      
        | 55 | 386 | Ruebenwurz | 
 | 
      
        | 56 | 533 | doc |   /**
 | 
      
        | 57 |  |  |    *  Sets VERP use on/off (default is off)
 | 
      
        | 58 |  |  |    *  @var bool
 | 
      
        | 59 |  |  |    */
 | 
      
        | 60 |  |  |   var $do_verp = false;
 | 
      
        | 61 | 386 | Ruebenwurz | 
 | 
      
        | 62 | 533 | doc |   /**#@+
 | 
      
        | 63 |  |  |    * @access private
 | 
      
        | 64 |  |  |    */
 | 
      
        | 65 |  |  |   var $smtp_conn;      # the socket to the server
 | 
      
        | 66 |  |  |   var $error;          # error if any on the last call
 | 
      
        | 67 |  |  |   var $helo_rply;      # the reply the server sent to us for HELO
 | 
      
        | 68 |  |  |   /**#@-*/
 | 
      
        | 69 | 386 | Ruebenwurz | 
 | 
      
        | 70 | 533 | doc |   /**
 | 
      
        | 71 |  |  |    * Initialize the class so that the data is in a known state.
 | 
      
        | 72 |  |  |    * @access public
 | 
      
        | 73 |  |  |    * @return void
 | 
      
        | 74 |  |  |    */
 | 
      
        | 75 |  |  |   function SMTP() {
 | 
      
        | 76 |  |  |     $this->smtp_conn = 0;
 | 
      
        | 77 |  |  |     $this->error = null;
 | 
      
        | 78 |  |  |     $this->helo_rply = null;
 | 
      
        | 79 | 386 | Ruebenwurz | 
 | 
      
        | 80 | 533 | doc |     $this->do_debug = 0;
 | 
      
        | 81 |  |  |   }
 | 
      
        | 82 | 386 | Ruebenwurz | 
 | 
      
        | 83 | 533 | doc |   /*************************************************************
 | 
      
        | 84 |  |  |    *                    CONNECTION FUNCTIONS                  *
 | 
      
        | 85 |  |  |    ***********************************************************/
 | 
      
        | 86 | 386 | Ruebenwurz | 
 | 
      
        | 87 | 533 | doc |   /**
 | 
      
        | 88 |  |  |    * Connect to the server specified on the port specified.
 | 
      
        | 89 |  |  |    * If the port is not specified use the default SMTP_PORT.
 | 
      
        | 90 |  |  |    * If tval is specified then a connection will try and be
 | 
      
        | 91 |  |  |    * established with the server for that number of seconds.
 | 
      
        | 92 |  |  |    * If tval is not specified the default is 30 seconds to
 | 
      
        | 93 |  |  |    * try on the connection.
 | 
      
        | 94 |  |  |    *
 | 
      
        | 95 |  |  |    * SMTP CODE SUCCESS: 220
 | 
      
        | 96 |  |  |    * SMTP CODE FAILURE: 421
 | 
      
        | 97 |  |  |    * @access public
 | 
      
        | 98 |  |  |    * @return bool
 | 
      
        | 99 |  |  |    */
 | 
      
        | 100 |  |  |   function Connect($host,$port=0,$tval=30) {
 | 
      
        | 101 |  |  |     # set the error val to null so there is no confusion
 | 
      
        | 102 |  |  |     $this->error = null;
 | 
      
        | 103 | 386 | Ruebenwurz | 
 | 
      
        | 104 | 533 | doc |     # make sure we are __not__ connected
 | 
      
        | 105 |  |  |     if($this->connected()) {
 | 
      
        | 106 |  |  |       # ok we are connected! what should we do?
 | 
      
        | 107 |  |  |       # for now we will just give an error saying we
 | 
      
        | 108 |  |  |       # are already connected
 | 
      
        | 109 |  |  |       $this->error = array("error" => "Already connected to a server");
 | 
      
        | 110 |  |  |       return false;
 | 
      
        | 111 |  |  |     }
 | 
      
        | 112 | 386 | Ruebenwurz | 
 | 
      
        | 113 | 533 | doc |     if(empty($port)) {
 | 
      
        | 114 |  |  |       $port = $this->SMTP_PORT;
 | 
      
        | 115 |  |  |     }
 | 
      
        | 116 | 386 | Ruebenwurz | 
 | 
      
        | 117 | 533 | doc |     #connect to the smtp server
 | 
      
        | 118 |  |  |     $this->smtp_conn = fsockopen($host,    # the host of the server
 | 
      
        | 119 |  |  |                                  $port,    # the port to use
 | 
      
        | 120 |  |  |                                  $errno,   # error number if any
 | 
      
        | 121 |  |  |                                  $errstr,  # error message if any
 | 
      
        | 122 |  |  |                                  $tval);   # give up after ? secs
 | 
      
        | 123 |  |  |     # verify we connected properly
 | 
      
        | 124 |  |  |     if(empty($this->smtp_conn)) {
 | 
      
        | 125 |  |  |       $this->error = array("error" => "Failed to connect to server",
 | 
      
        | 126 |  |  |                            "errno" => $errno,
 | 
      
        | 127 |  |  |                            "errstr" => $errstr);
 | 
      
        | 128 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 129 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 130 |  |  |                  ": $errstr ($errno)" . $this->CRLF;
 | 
      
        | 131 |  |  |       }
 | 
      
        | 132 |  |  |       return false;
 | 
      
        | 133 |  |  |     }
 | 
      
        | 134 | 386 | Ruebenwurz | 
 | 
      
        | 135 | 533 | doc |     # sometimes the SMTP server takes a little longer to respond
 | 
      
        | 136 |  |  |     # so we will give it a longer timeout for the first read
 | 
      
        | 137 |  |  |     // Windows still does not have support for this timeout function
 | 
      
        | 138 |  |  |     if(substr(PHP_OS, 0, 3) != "WIN")
 | 
      
        | 139 |  |  |      socket_set_timeout($this->smtp_conn, $tval, 0);
 | 
      
        | 140 | 386 | Ruebenwurz | 
 | 
      
        | 141 | 533 | doc |     # get any announcement stuff
 | 
      
        | 142 |  |  |     $announce = $this->get_lines();
 | 
      
        | 143 |  |  | 
 | 
      
        | 144 |  |  |     # set the timeout  of any socket functions at 1/10 of a second
 | 
      
        | 145 |  |  |     //if(function_exists("socket_set_timeout"))
 | 
      
        | 146 |  |  |     //   socket_set_timeout($this->smtp_conn, 0, 100000);
 | 
      
        | 147 |  |  | 
 | 
      
        | 148 |  |  |     if($this->do_debug >= 2) {
 | 
      
        | 149 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce;
 | 
      
        | 150 | 386 | Ruebenwurz |     }
 | 
      
        | 151 |  |  | 
 | 
      
        | 152 | 533 | doc |     return true;
 | 
      
        | 153 |  |  |   }
 | 
      
        | 154 | 386 | Ruebenwurz | 
 | 
      
        | 155 | 533 | doc |   /**
 | 
      
        | 156 |  |  |    * Performs SMTP authentication.  Must be run after running the
 | 
      
        | 157 |  |  |    * Hello() method.  Returns true if successfully authenticated.
 | 
      
        | 158 |  |  |    * @access public
 | 
      
        | 159 |  |  |    * @return bool
 | 
      
        | 160 |  |  |    */
 | 
      
        | 161 |  |  |   function Authenticate($username, $password) {
 | 
      
        | 162 |  |  |     // Start authentication
 | 
      
        | 163 |  |  |     fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
 | 
      
        | 164 | 386 | Ruebenwurz | 
 | 
      
        | 165 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 166 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 167 | 386 | Ruebenwurz | 
 | 
      
        | 168 | 533 | doc |     if($code != 334) {
 | 
      
        | 169 |  |  |       $this->error =
 | 
      
        | 170 |  |  |         array("error" => "AUTH not accepted from server",
 | 
      
        | 171 |  |  |               "smtp_code" => $code,
 | 
      
        | 172 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 173 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 174 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 175 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 176 |  |  |       }
 | 
      
        | 177 |  |  |       return false;
 | 
      
        | 178 |  |  |     }
 | 
      
        | 179 | 386 | Ruebenwurz | 
 | 
      
        | 180 | 533 | doc |     // Send encoded username
 | 
      
        | 181 |  |  |     fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
 | 
      
        | 182 | 386 | Ruebenwurz | 
 | 
      
        | 183 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 184 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 185 | 386 | Ruebenwurz | 
 | 
      
        | 186 | 533 | doc |     if($code != 334) {
 | 
      
        | 187 |  |  |       $this->error =
 | 
      
        | 188 |  |  |         array("error" => "Username not accepted from server",
 | 
      
        | 189 |  |  |               "smtp_code" => $code,
 | 
      
        | 190 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 191 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 192 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 193 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 194 |  |  |       }
 | 
      
        | 195 |  |  |       return false;
 | 
      
        | 196 |  |  |     }
 | 
      
        | 197 | 386 | Ruebenwurz | 
 | 
      
        | 198 | 533 | doc |     // Send encoded password
 | 
      
        | 199 |  |  |     fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
 | 
      
        | 200 | 386 | Ruebenwurz | 
 | 
      
        | 201 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 202 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 203 | 386 | Ruebenwurz | 
 | 
      
        | 204 | 533 | doc |     if($code != 235) {
 | 
      
        | 205 |  |  |       $this->error =
 | 
      
        | 206 |  |  |         array("error" => "Password not accepted from server",
 | 
      
        | 207 |  |  |               "smtp_code" => $code,
 | 
      
        | 208 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 209 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 210 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 211 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 212 |  |  |       }
 | 
      
        | 213 |  |  |       return false;
 | 
      
        | 214 | 386 | Ruebenwurz |     }
 | 
      
        | 215 |  |  | 
 | 
      
        | 216 | 533 | doc |     return true;
 | 
      
        | 217 |  |  |   }
 | 
      
        | 218 |  |  | 
 | 
      
        | 219 |  |  |   /**
 | 
      
        | 220 |  |  |    * Returns true if connected to a server otherwise false
 | 
      
        | 221 |  |  |    * @access private
 | 
      
        | 222 |  |  |    * @return bool
 | 
      
        | 223 |  |  |    */
 | 
      
        | 224 |  |  |   function Connected() {
 | 
      
        | 225 |  |  |     if(!empty($this->smtp_conn)) {
 | 
      
        | 226 |  |  |       $sock_status = socket_get_status($this->smtp_conn);
 | 
      
        | 227 |  |  |       if($sock_status["eof"]) {
 | 
      
        | 228 |  |  |         # hmm this is an odd situation... the socket is
 | 
      
        | 229 |  |  |         # valid but we are not connected anymore
 | 
      
        | 230 |  |  |         if($this->do_debug >= 1) {
 | 
      
        | 231 |  |  |             echo "SMTP -> NOTICE:" . $this->CRLF .
 | 
      
        | 232 |  |  |                  "EOF caught while checking if connected";
 | 
      
        | 233 | 386 | Ruebenwurz |         }
 | 
      
        | 234 | 533 | doc |         $this->Close();
 | 
      
        | 235 | 386 | Ruebenwurz |         return false;
 | 
      
        | 236 | 533 | doc |       }
 | 
      
        | 237 |  |  |       return true; # everything looks good
 | 
      
        | 238 | 386 | Ruebenwurz |     }
 | 
      
        | 239 | 533 | doc |     return false;
 | 
      
        | 240 |  |  |   }
 | 
      
        | 241 | 386 | Ruebenwurz | 
 | 
      
        | 242 | 533 | doc |   /**
 | 
      
        | 243 |  |  |    * Closes the socket and cleans up the state of the class.
 | 
      
        | 244 |  |  |    * It is not considered good to use this function without
 | 
      
        | 245 |  |  |    * first trying to use QUIT.
 | 
      
        | 246 |  |  |    * @access public
 | 
      
        | 247 |  |  |    * @return void
 | 
      
        | 248 |  |  |    */
 | 
      
        | 249 |  |  |   function Close() {
 | 
      
        | 250 |  |  |     $this->error = null; # so there is no confusion
 | 
      
        | 251 |  |  |     $this->helo_rply = null;
 | 
      
        | 252 |  |  |     if(!empty($this->smtp_conn)) {
 | 
      
        | 253 |  |  |       # close the connection and cleanup
 | 
      
        | 254 |  |  |       fclose($this->smtp_conn);
 | 
      
        | 255 |  |  |       $this->smtp_conn = 0;
 | 
      
        | 256 | 386 | Ruebenwurz |     }
 | 
      
        | 257 | 533 | doc |   }
 | 
      
        | 258 | 386 | Ruebenwurz | 
 | 
      
        | 259 | 533 | doc |   /***************************************************************
 | 
      
        | 260 |  |  |    *                        SMTP COMMANDS                       *
 | 
      
        | 261 |  |  |    *************************************************************/
 | 
      
        | 262 | 386 | Ruebenwurz | 
 | 
      
        | 263 | 533 | doc |   /**
 | 
      
        | 264 |  |  |    * Issues a data command and sends the msg_data to the server
 | 
      
        | 265 |  |  |    * finializing the mail transaction. $msg_data is the message
 | 
      
        | 266 |  |  |    * that is to be send with the headers. Each header needs to be
 | 
      
        | 267 |  |  |    * on a single line followed by a <CRLF> with the message headers
 | 
      
        | 268 |  |  |    * and the message body being seperated by and additional <CRLF>.
 | 
      
        | 269 |  |  |    *
 | 
      
        | 270 |  |  |    * Implements rfc 821: DATA <CRLF>
 | 
      
        | 271 |  |  |    *
 | 
      
        | 272 |  |  |    * SMTP CODE INTERMEDIATE: 354
 | 
      
        | 273 |  |  |    *     [data]
 | 
      
        | 274 |  |  |    *     <CRLF>.<CRLF>
 | 
      
        | 275 |  |  |    *     SMTP CODE SUCCESS: 250
 | 
      
        | 276 |  |  |    *     SMTP CODE FAILURE: 552,554,451,452
 | 
      
        | 277 |  |  |    * SMTP CODE FAILURE: 451,554
 | 
      
        | 278 |  |  |    * SMTP CODE ERROR  : 500,501,503,421
 | 
      
        | 279 |  |  |    * @access public
 | 
      
        | 280 |  |  |    * @return bool
 | 
      
        | 281 |  |  |    */
 | 
      
        | 282 |  |  |   function Data($msg_data) {
 | 
      
        | 283 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 284 | 386 | Ruebenwurz | 
 | 
      
        | 285 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 286 |  |  |       $this->error = array(
 | 
      
        | 287 |  |  |               "error" => "Called Data() without being connected");
 | 
      
        | 288 |  |  |       return false;
 | 
      
        | 289 |  |  |     }
 | 
      
        | 290 | 386 | Ruebenwurz | 
 | 
      
        | 291 | 533 | doc |     fputs($this->smtp_conn,"DATA" . $this->CRLF);
 | 
      
        | 292 | 386 | Ruebenwurz | 
 | 
      
        | 293 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 294 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 295 | 386 | Ruebenwurz | 
 | 
      
        | 296 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 297 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 298 |  |  |     }
 | 
      
        | 299 | 386 | Ruebenwurz | 
 | 
      
        | 300 | 533 | doc |     if($code != 354) {
 | 
      
        | 301 |  |  |       $this->error =
 | 
      
        | 302 |  |  |         array("error" => "DATA command not accepted from server",
 | 
      
        | 303 |  |  |               "smtp_code" => $code,
 | 
      
        | 304 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 305 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 306 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 307 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 308 |  |  |       }
 | 
      
        | 309 |  |  |       return false;
 | 
      
        | 310 |  |  |     }
 | 
      
        | 311 | 386 | Ruebenwurz | 
 | 
      
        | 312 | 533 | doc |     # the server is ready to accept data!
 | 
      
        | 313 |  |  |     # according to rfc 821 we should not send more than 1000
 | 
      
        | 314 |  |  |     # including the CRLF
 | 
      
        | 315 |  |  |     # characters on a single line so we will break the data up
 | 
      
        | 316 |  |  |     # into lines by \r and/or \n then if needed we will break
 | 
      
        | 317 |  |  |     # each of those into smaller lines to fit within the limit.
 | 
      
        | 318 |  |  |     # in addition we will be looking for lines that start with
 | 
      
        | 319 |  |  |     # a period '.' and append and additional period '.' to that
 | 
      
        | 320 |  |  |     # line. NOTE: this does not count towards are limit.
 | 
      
        | 321 | 386 | Ruebenwurz | 
 | 
      
        | 322 | 533 | doc |     # normalize the line breaks so we know the explode works
 | 
      
        | 323 |  |  |     $msg_data = str_replace("\r\n","\n",$msg_data);
 | 
      
        | 324 |  |  |     $msg_data = str_replace("\r","\n",$msg_data);
 | 
      
        | 325 |  |  |     $lines = explode("\n",$msg_data);
 | 
      
        | 326 | 386 | Ruebenwurz | 
 | 
      
        | 327 | 533 | doc |     # we need to find a good way to determine is headers are
 | 
      
        | 328 |  |  |     # in the msg_data or if it is a straight msg body
 | 
      
        | 329 |  |  |     # currently I am assuming rfc 822 definitions of msg headers
 | 
      
        | 330 |  |  |     # and if the first field of the first line (':' sperated)
 | 
      
        | 331 |  |  |     # does not contain a space then it _should_ be a header
 | 
      
        | 332 |  |  |     # and we can process all lines before a blank "" line as
 | 
      
        | 333 |  |  |     # headers.
 | 
      
        | 334 |  |  |     $field = substr($lines[0],0,strpos($lines[0],":"));
 | 
      
        | 335 |  |  |     $in_headers = false;
 | 
      
        | 336 |  |  |     if(!empty($field) && !strstr($field," ")) {
 | 
      
        | 337 |  |  |       $in_headers = true;
 | 
      
        | 338 |  |  |     }
 | 
      
        | 339 | 386 | Ruebenwurz | 
 | 
      
        | 340 | 533 | doc |     $max_line_length = 998; # used below; set here for ease in change
 | 
      
        | 341 |  |  | 
 | 
      
        | 342 |  |  |     while(list(,$line) = @each($lines)) {
 | 
      
        | 343 |  |  |       $lines_out = null;
 | 
      
        | 344 |  |  |       if($line == "" && $in_headers) {
 | 
      
        | 345 | 386 | Ruebenwurz |         $in_headers = false;
 | 
      
        | 346 | 533 | doc |       }
 | 
      
        | 347 |  |  |       # ok we need to break this line up into several
 | 
      
        | 348 |  |  |       # smaller lines
 | 
      
        | 349 |  |  |       while(strlen($line) > $max_line_length) {
 | 
      
        | 350 |  |  |         $pos = strrpos(substr($line,0,$max_line_length)," ");
 | 
      
        | 351 |  |  | 
 | 
      
        | 352 |  |  |         # Patch to fix DOS attack
 | 
      
        | 353 |  |  |         if(!$pos) {
 | 
      
        | 354 |  |  |           $pos = $max_line_length - 1;
 | 
      
        | 355 | 386 | Ruebenwurz |         }
 | 
      
        | 356 |  |  | 
 | 
      
        | 357 | 533 | doc |         $lines_out[] = substr($line,0,$pos);
 | 
      
        | 358 |  |  |         $line = substr($line,$pos + 1);
 | 
      
        | 359 |  |  |         # if we are processing headers we need to
 | 
      
        | 360 |  |  |         # add a LWSP-char to the front of the new line
 | 
      
        | 361 |  |  |         # rfc 822 on long msg headers
 | 
      
        | 362 |  |  |         if($in_headers) {
 | 
      
        | 363 |  |  |           $line = "\t" . $line;
 | 
      
        | 364 |  |  |         }
 | 
      
        | 365 |  |  |       }
 | 
      
        | 366 |  |  |       $lines_out[] = $line;
 | 
      
        | 367 | 386 | Ruebenwurz | 
 | 
      
        | 368 | 533 | doc |       # now send the lines to the server
 | 
      
        | 369 |  |  |       while(list(,$line_out) = @each($lines_out)) {
 | 
      
        | 370 |  |  |         if(strlen($line_out) > 0)
 | 
      
        | 371 |  |  |         {
 | 
      
        | 372 |  |  |           if(substr($line_out, 0, 1) == ".") {
 | 
      
        | 373 |  |  |             $line_out = "." . $line_out;
 | 
      
        | 374 |  |  |           }
 | 
      
        | 375 | 386 | Ruebenwurz |         }
 | 
      
        | 376 | 533 | doc |         fputs($this->smtp_conn,$line_out . $this->CRLF);
 | 
      
        | 377 |  |  |       }
 | 
      
        | 378 |  |  |     }
 | 
      
        | 379 | 386 | Ruebenwurz | 
 | 
      
        | 380 | 533 | doc |     # ok all the message data has been sent so lets get this
 | 
      
        | 381 |  |  |     # over with aleady
 | 
      
        | 382 |  |  |     fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);
 | 
      
        | 383 | 386 | Ruebenwurz | 
 | 
      
        | 384 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 385 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 386 | 386 | Ruebenwurz | 
 | 
      
        | 387 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 388 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 389 |  |  |     }
 | 
      
        | 390 | 386 | Ruebenwurz | 
 | 
      
        | 391 | 533 | doc |     if($code != 250) {
 | 
      
        | 392 |  |  |       $this->error =
 | 
      
        | 393 |  |  |         array("error" => "DATA not accepted from server",
 | 
      
        | 394 |  |  |               "smtp_code" => $code,
 | 
      
        | 395 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 396 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 397 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 398 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 399 |  |  |       }
 | 
      
        | 400 |  |  |       return false;
 | 
      
        | 401 | 386 | Ruebenwurz |     }
 | 
      
        | 402 | 533 | doc |     return true;
 | 
      
        | 403 |  |  |   }
 | 
      
        | 404 | 386 | Ruebenwurz | 
 | 
      
        | 405 | 533 | doc |   /**
 | 
      
        | 406 |  |  |    * Expand takes the name and asks the server to list all the
 | 
      
        | 407 |  |  |    * people who are members of the _list_. Expand will return
 | 
      
        | 408 |  |  |    * back and array of the result or false if an error occurs.
 | 
      
        | 409 |  |  |    * Each value in the array returned has the format of:
 | 
      
        | 410 |  |  |    *     [ <full-name> <sp> ] <path>
 | 
      
        | 411 |  |  |    * The definition of <path> is defined in rfc 821
 | 
      
        | 412 |  |  |    *
 | 
      
        | 413 |  |  |    * Implements rfc 821: EXPN <SP> <string> <CRLF>
 | 
      
        | 414 |  |  |    *
 | 
      
        | 415 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 416 |  |  |    * SMTP CODE FAILURE: 550
 | 
      
        | 417 |  |  |    * SMTP CODE ERROR  : 500,501,502,504,421
 | 
      
        | 418 |  |  |    * @access public
 | 
      
        | 419 |  |  |    * @return string array
 | 
      
        | 420 |  |  |    */
 | 
      
        | 421 |  |  |   function Expand($name) {
 | 
      
        | 422 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 423 | 386 | Ruebenwurz | 
 | 
      
        | 424 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 425 |  |  |       $this->error = array(
 | 
      
        | 426 |  |  |             "error" => "Called Expand() without being connected");
 | 
      
        | 427 |  |  |       return false;
 | 
      
        | 428 |  |  |     }
 | 
      
        | 429 | 386 | Ruebenwurz | 
 | 
      
        | 430 | 533 | doc |     fputs($this->smtp_conn,"EXPN " . $name . $this->CRLF);
 | 
      
        | 431 | 386 | Ruebenwurz | 
 | 
      
        | 432 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 433 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 434 | 386 | Ruebenwurz | 
 | 
      
        | 435 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 436 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 437 |  |  |     }
 | 
      
        | 438 | 386 | Ruebenwurz | 
 | 
      
        | 439 | 533 | doc |     if($code != 250) {
 | 
      
        | 440 |  |  |       $this->error =
 | 
      
        | 441 |  |  |         array("error" => "EXPN not accepted from server",
 | 
      
        | 442 |  |  |               "smtp_code" => $code,
 | 
      
        | 443 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 444 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 445 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 446 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 447 |  |  |       }
 | 
      
        | 448 |  |  |       return false;
 | 
      
        | 449 |  |  |     }
 | 
      
        | 450 | 386 | Ruebenwurz | 
 | 
      
        | 451 | 533 | doc |     # parse the reply and place in our array to return to user
 | 
      
        | 452 |  |  |     $entries = explode($this->CRLF,$rply);
 | 
      
        | 453 |  |  |     while(list(,$l) = @each($entries)) {
 | 
      
        | 454 |  |  |       $list[] = substr($l,4);
 | 
      
        | 455 | 386 | Ruebenwurz |     }
 | 
      
        | 456 |  |  | 
 | 
      
        | 457 | 533 | doc |     return $list;
 | 
      
        | 458 |  |  |   }
 | 
      
        | 459 | 386 | Ruebenwurz | 
 | 
      
        | 460 | 533 | doc |   /**
 | 
      
        | 461 |  |  |    * Sends the HELO command to the smtp server.
 | 
      
        | 462 |  |  |    * This makes sure that we and the server are in
 | 
      
        | 463 |  |  |    * the same known state.
 | 
      
        | 464 |  |  |    *
 | 
      
        | 465 |  |  |    * Implements from rfc 821: HELO <SP> <domain> <CRLF>
 | 
      
        | 466 |  |  |    *
 | 
      
        | 467 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 468 |  |  |    * SMTP CODE ERROR  : 500, 501, 504, 421
 | 
      
        | 469 |  |  |    * @access public
 | 
      
        | 470 |  |  |    * @return bool
 | 
      
        | 471 |  |  |    */
 | 
      
        | 472 |  |  |   function Hello($host="") {
 | 
      
        | 473 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 474 | 386 | Ruebenwurz | 
 | 
      
        | 475 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 476 |  |  |       $this->error = array(
 | 
      
        | 477 |  |  |             "error" => "Called Hello() without being connected");
 | 
      
        | 478 |  |  |       return false;
 | 
      
        | 479 |  |  |     }
 | 
      
        | 480 | 386 | Ruebenwurz | 
 | 
      
        | 481 | 533 | doc |     # if a hostname for the HELO was not specified determine
 | 
      
        | 482 |  |  |     # a suitable one to send
 | 
      
        | 483 |  |  |     if(empty($host)) {
 | 
      
        | 484 |  |  |       # we need to determine some sort of appopiate default
 | 
      
        | 485 |  |  |       # to send to the server
 | 
      
        | 486 |  |  |       $host = "localhost";
 | 
      
        | 487 |  |  |     }
 | 
      
        | 488 | 386 | Ruebenwurz | 
 | 
      
        | 489 | 533 | doc |     // Send extended hello first (RFC 2821)
 | 
      
        | 490 |  |  |     if(!$this->SendHello("EHLO", $host))
 | 
      
        | 491 |  |  |     {
 | 
      
        | 492 |  |  |       if(!$this->SendHello("HELO", $host))
 | 
      
        | 493 |  |  |           return false;
 | 
      
        | 494 | 386 | Ruebenwurz |     }
 | 
      
        | 495 |  |  | 
 | 
      
        | 496 | 533 | doc |     return true;
 | 
      
        | 497 |  |  |   }
 | 
      
        | 498 | 386 | Ruebenwurz | 
 | 
      
        | 499 | 533 | doc |   /**
 | 
      
        | 500 |  |  |    * Sends a HELO/EHLO command.
 | 
      
        | 501 |  |  |    * @access private
 | 
      
        | 502 |  |  |    * @return bool
 | 
      
        | 503 |  |  |    */
 | 
      
        | 504 |  |  |   function SendHello($hello, $host) {
 | 
      
        | 505 |  |  |     fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF);
 | 
      
        | 506 | 386 | Ruebenwurz | 
 | 
      
        | 507 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 508 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 509 | 386 | Ruebenwurz | 
 | 
      
        | 510 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 511 |  |  |       echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply;
 | 
      
        | 512 |  |  |     }
 | 
      
        | 513 | 386 | Ruebenwurz | 
 | 
      
        | 514 | 533 | doc |     if($code != 250) {
 | 
      
        | 515 |  |  |       $this->error =
 | 
      
        | 516 |  |  |         array("error" => $hello . " not accepted from server",
 | 
      
        | 517 |  |  |               "smtp_code" => $code,
 | 
      
        | 518 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 519 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 520 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 521 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 522 |  |  |       }
 | 
      
        | 523 |  |  |       return false;
 | 
      
        | 524 | 386 | Ruebenwurz |     }
 | 
      
        | 525 |  |  | 
 | 
      
        | 526 | 533 | doc |     $this->helo_rply = $rply;
 | 
      
        | 527 | 386 | Ruebenwurz | 
 | 
      
        | 528 | 533 | doc |     return true;
 | 
      
        | 529 |  |  |   }
 | 
      
        | 530 | 386 | Ruebenwurz | 
 | 
      
        | 531 | 533 | doc |   /**
 | 
      
        | 532 |  |  |    * Gets help information on the keyword specified. If the keyword
 | 
      
        | 533 |  |  |    * is not specified then returns generic help, ussually contianing
 | 
      
        | 534 |  |  |    * A list of keywords that help is available on. This function
 | 
      
        | 535 |  |  |    * returns the results back to the user. It is up to the user to
 | 
      
        | 536 |  |  |    * handle the returned data. If an error occurs then false is
 | 
      
        | 537 |  |  |    * returned with $this->error set appropiately.
 | 
      
        | 538 |  |  |    *
 | 
      
        | 539 |  |  |    * Implements rfc 821: HELP [ <SP> <string> ] <CRLF>
 | 
      
        | 540 |  |  |    *
 | 
      
        | 541 |  |  |    * SMTP CODE SUCCESS: 211,214
 | 
      
        | 542 |  |  |    * SMTP CODE ERROR  : 500,501,502,504,421
 | 
      
        | 543 |  |  |    * @access public
 | 
      
        | 544 |  |  |    * @return string
 | 
      
        | 545 |  |  |    */
 | 
      
        | 546 |  |  |   function Help($keyword="") {
 | 
      
        | 547 |  |  |     $this->error = null; # to avoid confusion
 | 
      
        | 548 | 386 | Ruebenwurz | 
 | 
      
        | 549 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 550 |  |  |       $this->error = array(
 | 
      
        | 551 |  |  |               "error" => "Called Help() without being connected");
 | 
      
        | 552 |  |  |       return false;
 | 
      
        | 553 |  |  |     }
 | 
      
        | 554 | 386 | Ruebenwurz | 
 | 
      
        | 555 | 533 | doc |     $extra = "";
 | 
      
        | 556 |  |  |     if(!empty($keyword)) {
 | 
      
        | 557 |  |  |       $extra = " " . $keyword;
 | 
      
        | 558 |  |  |     }
 | 
      
        | 559 | 386 | Ruebenwurz | 
 | 
      
        | 560 | 533 | doc |     fputs($this->smtp_conn,"HELP" . $extra . $this->CRLF);
 | 
      
        | 561 | 386 | Ruebenwurz | 
 | 
      
        | 562 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 563 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 564 | 386 | Ruebenwurz | 
 | 
      
        | 565 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 566 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 567 | 386 | Ruebenwurz |     }
 | 
      
        | 568 |  |  | 
 | 
      
        | 569 | 533 | doc |     if($code != 211 && $code != 214) {
 | 
      
        | 570 |  |  |       $this->error =
 | 
      
        | 571 |  |  |         array("error" => "HELP not accepted from server",
 | 
      
        | 572 |  |  |               "smtp_code" => $code,
 | 
      
        | 573 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 574 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 575 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 576 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 577 |  |  |       }
 | 
      
        | 578 |  |  |       return false;
 | 
      
        | 579 |  |  |     }
 | 
      
        | 580 | 386 | Ruebenwurz | 
 | 
      
        | 581 | 533 | doc |     return $rply;
 | 
      
        | 582 |  |  |   }
 | 
      
        | 583 | 386 | Ruebenwurz | 
 | 
      
        | 584 | 533 | doc |   /**
 | 
      
        | 585 |  |  |    * Starts a mail transaction from the email address specified in
 | 
      
        | 586 |  |  |    * $from. Returns true if successful or false otherwise. If True
 | 
      
        | 587 |  |  |    * the mail transaction is started and then one or more Recipient
 | 
      
        | 588 |  |  |    * commands may be called followed by a Data command.
 | 
      
        | 589 |  |  |    *
 | 
      
        | 590 |  |  |    * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
 | 
      
        | 591 |  |  |    *
 | 
      
        | 592 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 593 |  |  |    * SMTP CODE SUCCESS: 552,451,452
 | 
      
        | 594 |  |  |    * SMTP CODE SUCCESS: 500,501,421
 | 
      
        | 595 |  |  |    * @access public
 | 
      
        | 596 |  |  |    * @return bool
 | 
      
        | 597 |  |  |    */
 | 
      
        | 598 |  |  |   function Mail($from) {
 | 
      
        | 599 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 600 | 386 | Ruebenwurz | 
 | 
      
        | 601 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 602 |  |  |       $this->error = array(
 | 
      
        | 603 |  |  |               "error" => "Called Mail() without being connected");
 | 
      
        | 604 |  |  |       return false;
 | 
      
        | 605 |  |  |     }
 | 
      
        | 606 | 386 | Ruebenwurz | 
 | 
      
        | 607 | 533 | doc |     $useVerp = ($this->do_verp ? "XVERP" : "");
 | 
      
        | 608 |  |  |     fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
 | 
      
        | 609 | 386 | Ruebenwurz | 
 | 
      
        | 610 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 611 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 612 |  |  | 
 | 
      
        | 613 |  |  |     if($this->do_debug >= 2) {
 | 
      
        | 614 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 615 | 386 | Ruebenwurz |     }
 | 
      
        | 616 |  |  | 
 | 
      
        | 617 | 533 | doc |     if($code != 250) {
 | 
      
        | 618 |  |  |       $this->error =
 | 
      
        | 619 |  |  |         array("error" => "MAIL not accepted from server",
 | 
      
        | 620 |  |  |               "smtp_code" => $code,
 | 
      
        | 621 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 622 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 623 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 624 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 625 |  |  |       }
 | 
      
        | 626 |  |  |       return false;
 | 
      
        | 627 |  |  |     }
 | 
      
        | 628 |  |  |     return true;
 | 
      
        | 629 |  |  |   }
 | 
      
        | 630 | 386 | Ruebenwurz | 
 | 
      
        | 631 | 533 | doc |   /**
 | 
      
        | 632 |  |  |    * Sends the command NOOP to the SMTP server.
 | 
      
        | 633 |  |  |    *
 | 
      
        | 634 |  |  |    * Implements from rfc 821: NOOP <CRLF>
 | 
      
        | 635 |  |  |    *
 | 
      
        | 636 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 637 |  |  |    * SMTP CODE ERROR  : 500, 421
 | 
      
        | 638 |  |  |    * @access public
 | 
      
        | 639 |  |  |    * @return bool
 | 
      
        | 640 |  |  |    */
 | 
      
        | 641 |  |  |   function Noop() {
 | 
      
        | 642 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 643 | 386 | Ruebenwurz | 
 | 
      
        | 644 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 645 |  |  |       $this->error = array(
 | 
      
        | 646 |  |  |               "error" => "Called Noop() without being connected");
 | 
      
        | 647 |  |  |       return false;
 | 
      
        | 648 |  |  |     }
 | 
      
        | 649 | 386 | Ruebenwurz | 
 | 
      
        | 650 | 533 | doc |     fputs($this->smtp_conn,"NOOP" . $this->CRLF);
 | 
      
        | 651 | 386 | Ruebenwurz | 
 | 
      
        | 652 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 653 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 654 | 386 | Ruebenwurz | 
 | 
      
        | 655 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 656 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 657 | 386 | Ruebenwurz |     }
 | 
      
        | 658 |  |  | 
 | 
      
        | 659 | 533 | doc |     if($code != 250) {
 | 
      
        | 660 |  |  |       $this->error =
 | 
      
        | 661 |  |  |         array("error" => "NOOP not accepted from server",
 | 
      
        | 662 |  |  |               "smtp_code" => $code,
 | 
      
        | 663 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 664 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 665 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 666 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 667 |  |  |       }
 | 
      
        | 668 |  |  |       return false;
 | 
      
        | 669 |  |  |     }
 | 
      
        | 670 |  |  |     return true;
 | 
      
        | 671 |  |  |   }
 | 
      
        | 672 | 386 | Ruebenwurz | 
 | 
      
        | 673 | 533 | doc |   /**
 | 
      
        | 674 |  |  |    * Sends the quit command to the server and then closes the socket
 | 
      
        | 675 |  |  |    * if there is no error or the $close_on_error argument is true.
 | 
      
        | 676 |  |  |    *
 | 
      
        | 677 |  |  |    * Implements from rfc 821: QUIT <CRLF>
 | 
      
        | 678 |  |  |    *
 | 
      
        | 679 |  |  |    * SMTP CODE SUCCESS: 221
 | 
      
        | 680 |  |  |    * SMTP CODE ERROR  : 500
 | 
      
        | 681 |  |  |    * @access public
 | 
      
        | 682 |  |  |    * @return bool
 | 
      
        | 683 |  |  |    */
 | 
      
        | 684 |  |  |   function Quit($close_on_error=true) {
 | 
      
        | 685 |  |  |     $this->error = null; # so there is no confusion
 | 
      
        | 686 | 386 | Ruebenwurz | 
 | 
      
        | 687 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 688 |  |  |       $this->error = array(
 | 
      
        | 689 |  |  |               "error" => "Called Quit() without being connected");
 | 
      
        | 690 |  |  |       return false;
 | 
      
        | 691 |  |  |     }
 | 
      
        | 692 | 386 | Ruebenwurz | 
 | 
      
        | 693 | 533 | doc |     # send the quit command to the server
 | 
      
        | 694 |  |  |     fputs($this->smtp_conn,"quit" . $this->CRLF);
 | 
      
        | 695 | 386 | Ruebenwurz | 
 | 
      
        | 696 | 533 | doc |     # get any good-bye messages
 | 
      
        | 697 |  |  |     $byemsg = $this->get_lines();
 | 
      
        | 698 | 386 | Ruebenwurz | 
 | 
      
        | 699 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 700 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg;
 | 
      
        | 701 |  |  |     }
 | 
      
        | 702 | 386 | Ruebenwurz | 
 | 
      
        | 703 | 533 | doc |     $rval = true;
 | 
      
        | 704 |  |  |     $e = null;
 | 
      
        | 705 | 386 | Ruebenwurz | 
 | 
      
        | 706 | 533 | doc |     $code = substr($byemsg,0,3);
 | 
      
        | 707 |  |  |     if($code != 221) {
 | 
      
        | 708 |  |  |       # use e as a tmp var cause Close will overwrite $this->error
 | 
      
        | 709 |  |  |       $e = array("error" => "SMTP server rejected quit command",
 | 
      
        | 710 |  |  |                  "smtp_code" => $code,
 | 
      
        | 711 |  |  |                  "smtp_rply" => substr($byemsg,4));
 | 
      
        | 712 |  |  |       $rval = false;
 | 
      
        | 713 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 714 |  |  |         echo "SMTP -> ERROR: " . $e["error"] . ": " .
 | 
      
        | 715 |  |  |                  $byemsg . $this->CRLF;
 | 
      
        | 716 |  |  |       }
 | 
      
        | 717 |  |  |     }
 | 
      
        | 718 | 386 | Ruebenwurz | 
 | 
      
        | 719 | 533 | doc |     if(empty($e) || $close_on_error) {
 | 
      
        | 720 |  |  |       $this->Close();
 | 
      
        | 721 | 386 | Ruebenwurz |     }
 | 
      
        | 722 |  |  | 
 | 
      
        | 723 | 533 | doc |     return $rval;
 | 
      
        | 724 |  |  |   }
 | 
      
        | 725 | 386 | Ruebenwurz | 
 | 
      
        | 726 | 533 | doc |   /**
 | 
      
        | 727 |  |  |    * Sends the command RCPT to the SMTP server with the TO: argument of $to.
 | 
      
        | 728 |  |  |    * Returns true if the recipient was accepted false if it was rejected.
 | 
      
        | 729 |  |  |    *
 | 
      
        | 730 |  |  |    * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
 | 
      
        | 731 |  |  |    *
 | 
      
        | 732 |  |  |    * SMTP CODE SUCCESS: 250,251
 | 
      
        | 733 |  |  |    * SMTP CODE FAILURE: 550,551,552,553,450,451,452
 | 
      
        | 734 |  |  |    * SMTP CODE ERROR  : 500,501,503,421
 | 
      
        | 735 |  |  |    * @access public
 | 
      
        | 736 |  |  |    * @return bool
 | 
      
        | 737 |  |  |    */
 | 
      
        | 738 |  |  |   function Recipient($to) {
 | 
      
        | 739 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 740 | 386 | Ruebenwurz | 
 | 
      
        | 741 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 742 |  |  |       $this->error = array(
 | 
      
        | 743 |  |  |               "error" => "Called Recipient() without being connected");
 | 
      
        | 744 |  |  |       return false;
 | 
      
        | 745 |  |  |     }
 | 
      
        | 746 | 386 | Ruebenwurz | 
 | 
      
        | 747 | 533 | doc |     fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
 | 
      
        | 748 | 386 | Ruebenwurz | 
 | 
      
        | 749 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 750 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 751 | 386 | Ruebenwurz | 
 | 
      
        | 752 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 753 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 754 | 386 | Ruebenwurz |     }
 | 
      
        | 755 |  |  | 
 | 
      
        | 756 | 533 | doc |     if($code != 250 && $code != 251) {
 | 
      
        | 757 |  |  |       $this->error =
 | 
      
        | 758 |  |  |         array("error" => "RCPT not accepted from server",
 | 
      
        | 759 |  |  |               "smtp_code" => $code,
 | 
      
        | 760 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 761 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 762 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 763 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 764 |  |  |       }
 | 
      
        | 765 |  |  |       return false;
 | 
      
        | 766 |  |  |     }
 | 
      
        | 767 |  |  |     return true;
 | 
      
        | 768 |  |  |   }
 | 
      
        | 769 | 386 | Ruebenwurz | 
 | 
      
        | 770 | 533 | doc |   /**
 | 
      
        | 771 |  |  |    * Sends the RSET command to abort and transaction that is
 | 
      
        | 772 |  |  |    * currently in progress. Returns true if successful false
 | 
      
        | 773 |  |  |    * otherwise.
 | 
      
        | 774 |  |  |    *
 | 
      
        | 775 |  |  |    * Implements rfc 821: RSET <CRLF>
 | 
      
        | 776 |  |  |    *
 | 
      
        | 777 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 778 |  |  |    * SMTP CODE ERROR  : 500,501,504,421
 | 
      
        | 779 |  |  |    * @access public
 | 
      
        | 780 |  |  |    * @return bool
 | 
      
        | 781 |  |  |    */
 | 
      
        | 782 |  |  |   function Reset() {
 | 
      
        | 783 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 784 | 386 | Ruebenwurz | 
 | 
      
        | 785 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 786 |  |  |       $this->error = array(
 | 
      
        | 787 |  |  |               "error" => "Called Reset() without being connected");
 | 
      
        | 788 |  |  |       return false;
 | 
      
        | 789 |  |  |     }
 | 
      
        | 790 | 386 | Ruebenwurz | 
 | 
      
        | 791 | 533 | doc |     fputs($this->smtp_conn,"RSET" . $this->CRLF);
 | 
      
        | 792 | 386 | Ruebenwurz | 
 | 
      
        | 793 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 794 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 795 | 386 | Ruebenwurz | 
 | 
      
        | 796 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 797 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 798 |  |  |     }
 | 
      
        | 799 | 386 | Ruebenwurz | 
 | 
      
        | 800 | 533 | doc |     if($code != 250) {
 | 
      
        | 801 |  |  |       $this->error =
 | 
      
        | 802 |  |  |         array("error" => "RSET failed",
 | 
      
        | 803 |  |  |               "smtp_code" => $code,
 | 
      
        | 804 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 805 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 806 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 807 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 808 |  |  |       }
 | 
      
        | 809 |  |  |       return false;
 | 
      
        | 810 | 386 | Ruebenwurz |     }
 | 
      
        | 811 |  |  | 
 | 
      
        | 812 | 533 | doc |     return true;
 | 
      
        | 813 |  |  |   }
 | 
      
        | 814 | 386 | Ruebenwurz | 
 | 
      
        | 815 | 533 | doc |   /**
 | 
      
        | 816 |  |  |    * Starts a mail transaction from the email address specified in
 | 
      
        | 817 |  |  |    * $from. Returns true if successful or false otherwise. If True
 | 
      
        | 818 |  |  |    * the mail transaction is started and then one or more Recipient
 | 
      
        | 819 |  |  |    * commands may be called followed by a Data command. This command
 | 
      
        | 820 |  |  |    * will send the message to the users terminal if they are logged
 | 
      
        | 821 |  |  |    * in.
 | 
      
        | 822 |  |  |    *
 | 
      
        | 823 |  |  |    * Implements rfc 821: SEND <SP> FROM:<reverse-path> <CRLF>
 | 
      
        | 824 |  |  |    *
 | 
      
        | 825 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 826 |  |  |    * SMTP CODE SUCCESS: 552,451,452
 | 
      
        | 827 |  |  |    * SMTP CODE SUCCESS: 500,501,502,421
 | 
      
        | 828 |  |  |    * @access public
 | 
      
        | 829 |  |  |    * @return bool
 | 
      
        | 830 |  |  |    */
 | 
      
        | 831 |  |  |   function Send($from) {
 | 
      
        | 832 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 833 | 386 | Ruebenwurz | 
 | 
      
        | 834 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 835 |  |  |       $this->error = array(
 | 
      
        | 836 |  |  |               "error" => "Called Send() without being connected");
 | 
      
        | 837 |  |  |       return false;
 | 
      
        | 838 |  |  |     }
 | 
      
        | 839 | 386 | Ruebenwurz | 
 | 
      
        | 840 | 533 | doc |     fputs($this->smtp_conn,"SEND FROM:" . $from . $this->CRLF);
 | 
      
        | 841 | 386 | Ruebenwurz | 
 | 
      
        | 842 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 843 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 844 | 386 | Ruebenwurz | 
 | 
      
        | 845 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 846 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 847 | 386 | Ruebenwurz |     }
 | 
      
        | 848 |  |  | 
 | 
      
        | 849 | 533 | doc |     if($code != 250) {
 | 
      
        | 850 |  |  |       $this->error =
 | 
      
        | 851 |  |  |         array("error" => "SEND not accepted from server",
 | 
      
        | 852 |  |  |               "smtp_code" => $code,
 | 
      
        | 853 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 854 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 855 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 856 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 857 |  |  |       }
 | 
      
        | 858 |  |  |       return false;
 | 
      
        | 859 |  |  |     }
 | 
      
        | 860 |  |  |     return true;
 | 
      
        | 861 |  |  |   }
 | 
      
        | 862 | 386 | Ruebenwurz | 
 | 
      
        | 863 | 533 | doc |   /**
 | 
      
        | 864 |  |  |    * Starts a mail transaction from the email address specified in
 | 
      
        | 865 |  |  |    * $from. Returns true if successful or false otherwise. If True
 | 
      
        | 866 |  |  |    * the mail transaction is started and then one or more Recipient
 | 
      
        | 867 |  |  |    * commands may be called followed by a Data command. This command
 | 
      
        | 868 |  |  |    * will send the message to the users terminal if they are logged
 | 
      
        | 869 |  |  |    * in and send them an email.
 | 
      
        | 870 |  |  |    *
 | 
      
        | 871 |  |  |    * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
 | 
      
        | 872 |  |  |    *
 | 
      
        | 873 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 874 |  |  |    * SMTP CODE SUCCESS: 552,451,452
 | 
      
        | 875 |  |  |    * SMTP CODE SUCCESS: 500,501,502,421
 | 
      
        | 876 |  |  |    * @access public
 | 
      
        | 877 |  |  |    * @return bool
 | 
      
        | 878 |  |  |    */
 | 
      
        | 879 |  |  |   function SendAndMail($from) {
 | 
      
        | 880 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 881 | 386 | Ruebenwurz | 
 | 
      
        | 882 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 883 |  |  |       $this->error = array(
 | 
      
        | 884 |  |  |           "error" => "Called SendAndMail() without being connected");
 | 
      
        | 885 |  |  |       return false;
 | 
      
        | 886 |  |  |     }
 | 
      
        | 887 | 386 | Ruebenwurz | 
 | 
      
        | 888 | 533 | doc |     fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF);
 | 
      
        | 889 | 386 | Ruebenwurz | 
 | 
      
        | 890 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 891 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 892 | 386 | Ruebenwurz | 
 | 
      
        | 893 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 894 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 895 | 386 | Ruebenwurz |     }
 | 
      
        | 896 |  |  | 
 | 
      
        | 897 | 533 | doc |     if($code != 250) {
 | 
      
        | 898 |  |  |       $this->error =
 | 
      
        | 899 |  |  |         array("error" => "SAML not accepted from server",
 | 
      
        | 900 |  |  |               "smtp_code" => $code,
 | 
      
        | 901 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 902 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 903 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 904 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 905 |  |  |       }
 | 
      
        | 906 |  |  |       return false;
 | 
      
        | 907 |  |  |     }
 | 
      
        | 908 |  |  |     return true;
 | 
      
        | 909 |  |  |   }
 | 
      
        | 910 | 386 | Ruebenwurz | 
 | 
      
        | 911 | 533 | doc |   /**
 | 
      
        | 912 |  |  |    * Starts a mail transaction from the email address specified in
 | 
      
        | 913 |  |  |    * $from. Returns true if successful or false otherwise. If True
 | 
      
        | 914 |  |  |    * the mail transaction is started and then one or more Recipient
 | 
      
        | 915 |  |  |    * commands may be called followed by a Data command. This command
 | 
      
        | 916 |  |  |    * will send the message to the users terminal if they are logged
 | 
      
        | 917 |  |  |    * in or mail it to them if they are not.
 | 
      
        | 918 |  |  |    *
 | 
      
        | 919 |  |  |    * Implements rfc 821: SOML <SP> FROM:<reverse-path> <CRLF>
 | 
      
        | 920 |  |  |    *
 | 
      
        | 921 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 922 |  |  |    * SMTP CODE SUCCESS: 552,451,452
 | 
      
        | 923 |  |  |    * SMTP CODE SUCCESS: 500,501,502,421
 | 
      
        | 924 |  |  |    * @access public
 | 
      
        | 925 |  |  |    * @return bool
 | 
      
        | 926 |  |  |    */
 | 
      
        | 927 |  |  |   function SendOrMail($from) {
 | 
      
        | 928 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 929 | 386 | Ruebenwurz | 
 | 
      
        | 930 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 931 |  |  |       $this->error = array(
 | 
      
        | 932 |  |  |           "error" => "Called SendOrMail() without being connected");
 | 
      
        | 933 |  |  |       return false;
 | 
      
        | 934 |  |  |     }
 | 
      
        | 935 | 386 | Ruebenwurz | 
 | 
      
        | 936 | 533 | doc |     fputs($this->smtp_conn,"SOML FROM:" . $from . $this->CRLF);
 | 
      
        | 937 | 386 | Ruebenwurz | 
 | 
      
        | 938 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 939 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 940 | 386 | Ruebenwurz | 
 | 
      
        | 941 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 942 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 943 | 386 | Ruebenwurz |     }
 | 
      
        | 944 |  |  | 
 | 
      
        | 945 | 533 | doc |     if($code != 250) {
 | 
      
        | 946 |  |  |       $this->error =
 | 
      
        | 947 |  |  |         array("error" => "SOML not accepted from server",
 | 
      
        | 948 |  |  |               "smtp_code" => $code,
 | 
      
        | 949 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 950 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 951 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 952 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 953 |  |  |       }
 | 
      
        | 954 |  |  |       return false;
 | 
      
        | 955 | 386 | Ruebenwurz |     }
 | 
      
        | 956 | 533 | doc |     return true;
 | 
      
        | 957 |  |  |   }
 | 
      
        | 958 | 386 | Ruebenwurz | 
 | 
      
        | 959 | 533 | doc |   /**
 | 
      
        | 960 |  |  |    * This is an optional command for SMTP that this class does not
 | 
      
        | 961 |  |  |    * support. This method is here to make the RFC821 Definition
 | 
      
        | 962 |  |  |    * complete for this class and __may__ be implimented in the future
 | 
      
        | 963 |  |  |    *
 | 
      
        | 964 |  |  |    * Implements from rfc 821: TURN <CRLF>
 | 
      
        | 965 |  |  |    *
 | 
      
        | 966 |  |  |    * SMTP CODE SUCCESS: 250
 | 
      
        | 967 |  |  |    * SMTP CODE FAILURE: 502
 | 
      
        | 968 |  |  |    * SMTP CODE ERROR  : 500, 503
 | 
      
        | 969 |  |  |    * @access public
 | 
      
        | 970 |  |  |    * @return bool
 | 
      
        | 971 |  |  |    */
 | 
      
        | 972 |  |  |   function Turn() {
 | 
      
        | 973 |  |  |     $this->error = array("error" => "This method, TURN, of the SMTP ".
 | 
      
        | 974 |  |  |                                     "is not implemented");
 | 
      
        | 975 |  |  |     if($this->do_debug >= 1) {
 | 
      
        | 976 |  |  |       echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF;
 | 
      
        | 977 |  |  |     }
 | 
      
        | 978 |  |  |     return false;
 | 
      
        | 979 |  |  |   }
 | 
      
        | 980 | 386 | Ruebenwurz | 
 | 
      
        | 981 | 533 | doc |   /**
 | 
      
        | 982 |  |  |    * Verifies that the name is recognized by the server.
 | 
      
        | 983 |  |  |    * Returns false if the name could not be verified otherwise
 | 
      
        | 984 |  |  |    * the response from the server is returned.
 | 
      
        | 985 |  |  |    *
 | 
      
        | 986 |  |  |    * Implements rfc 821: VRFY <SP> <string> <CRLF>
 | 
      
        | 987 |  |  |    *
 | 
      
        | 988 |  |  |    * SMTP CODE SUCCESS: 250,251
 | 
      
        | 989 |  |  |    * SMTP CODE FAILURE: 550,551,553
 | 
      
        | 990 |  |  |    * SMTP CODE ERROR  : 500,501,502,421
 | 
      
        | 991 |  |  |    * @access public
 | 
      
        | 992 |  |  |    * @return int
 | 
      
        | 993 |  |  |    */
 | 
      
        | 994 |  |  |   function Verify($name) {
 | 
      
        | 995 |  |  |     $this->error = null; # so no confusion is caused
 | 
      
        | 996 | 386 | Ruebenwurz | 
 | 
      
        | 997 | 533 | doc |     if(!$this->connected()) {
 | 
      
        | 998 |  |  |       $this->error = array(
 | 
      
        | 999 |  |  |               "error" => "Called Verify() without being connected");
 | 
      
        | 1000 |  |  |       return false;
 | 
      
        | 1001 |  |  |     }
 | 
      
        | 1002 | 386 | Ruebenwurz | 
 | 
      
        | 1003 | 533 | doc |     fputs($this->smtp_conn,"VRFY " . $name . $this->CRLF);
 | 
      
        | 1004 | 386 | Ruebenwurz | 
 | 
      
        | 1005 | 533 | doc |     $rply = $this->get_lines();
 | 
      
        | 1006 |  |  |     $code = substr($rply,0,3);
 | 
      
        | 1007 | 386 | Ruebenwurz | 
 | 
      
        | 1008 | 533 | doc |     if($this->do_debug >= 2) {
 | 
      
        | 1009 |  |  |       echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply;
 | 
      
        | 1010 | 386 | Ruebenwurz |     }
 | 
      
        | 1011 |  |  | 
 | 
      
        | 1012 | 533 | doc |     if($code != 250 && $code != 251) {
 | 
      
        | 1013 |  |  |       $this->error =
 | 
      
        | 1014 |  |  |         array("error" => "VRFY failed on name '$name'",
 | 
      
        | 1015 |  |  |               "smtp_code" => $code,
 | 
      
        | 1016 |  |  |               "smtp_msg" => substr($rply,4));
 | 
      
        | 1017 |  |  |       if($this->do_debug >= 1) {
 | 
      
        | 1018 |  |  |         echo "SMTP -> ERROR: " . $this->error["error"] .
 | 
      
        | 1019 |  |  |                  ": " . $rply . $this->CRLF;
 | 
      
        | 1020 |  |  |       }
 | 
      
        | 1021 |  |  |       return false;
 | 
      
        | 1022 |  |  |     }
 | 
      
        | 1023 |  |  |     return $rply;
 | 
      
        | 1024 |  |  |   }
 | 
      
        | 1025 | 386 | Ruebenwurz | 
 | 
      
        | 1026 | 533 | doc |   /*******************************************************************
 | 
      
        | 1027 |  |  |    *                       INTERNAL FUNCTIONS                       *
 | 
      
        | 1028 |  |  |    ******************************************************************/
 | 
      
        | 1029 |  |  | 
 | 
      
        | 1030 |  |  |   /**
 | 
      
        | 1031 |  |  |    * Read in as many lines as possible
 | 
      
        | 1032 |  |  |    * either before eof or socket timeout occurs on the operation.
 | 
      
        | 1033 |  |  |    * With SMTP we can tell if we have more lines to read if the
 | 
      
        | 1034 |  |  |    * 4th character is '-' symbol. If it is a space then we don't
 | 
      
        | 1035 |  |  |    * need to read anything else.
 | 
      
        | 1036 |  |  |    * @access private
 | 
      
        | 1037 |  |  |    * @return string
 | 
      
        | 1038 |  |  |    */
 | 
      
        | 1039 |  |  |   function get_lines() {
 | 
      
        | 1040 |  |  |     $data = "";
 | 
      
        | 1041 |  |  |     while($str = @fgets($this->smtp_conn,515)) {
 | 
      
        | 1042 |  |  |       if($this->do_debug >= 4) {
 | 
      
        | 1043 |  |  |         echo "SMTP -> get_lines(): \$data was \"$data\"" .
 | 
      
        | 1044 |  |  |                  $this->CRLF;
 | 
      
        | 1045 |  |  |         echo "SMTP -> get_lines(): \$str is \"$str\"" .
 | 
      
        | 1046 |  |  |                  $this->CRLF;
 | 
      
        | 1047 |  |  |       }
 | 
      
        | 1048 |  |  |       $data .= $str;
 | 
      
        | 1049 |  |  |       if($this->do_debug >= 4) {
 | 
      
        | 1050 |  |  |         echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF;
 | 
      
        | 1051 |  |  |       }
 | 
      
        | 1052 |  |  |       # if the 4th character is a space then we are done reading
 | 
      
        | 1053 |  |  |       # so just break the loop
 | 
      
        | 1054 |  |  |       if(substr($str,3,1) == " ") { break; }
 | 
      
        | 1055 | 386 | Ruebenwurz |     }
 | 
      
        | 1056 | 533 | doc |     return $data;
 | 
      
        | 1057 |  |  |   }
 | 
      
        | 1058 | 386 | Ruebenwurz | 
 | 
      
        | 1059 |  |  | }
 | 
      
        | 1060 |  |  | 
 | 
      
        | 1061 |  |  | 
 | 
      
        | 1062 |  |  |  ?>
 |