Changeset 1317

Show
Ignore:
Timestamp:
01/07/08 21:59:37 (1 year ago)
Author:
dana
Message:

Updated PHPMailer library to v2

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wifidog-auth/wifidog/lib/PHPMailer/class.phpmailer.php

    r1090 r1317  
    11<?php 
    2 //////////////////////////////////////////////////// 
    3 // PHPMailer - PHP email class 
    4 // 
    5 // Class for sending email using either 
    6 // sendmail, PHP mail(), or SMTP.  Methods are 
    7 // based upon the standard AspEmail(tm) classes. 
    8 // 
    9 // Copyright (C) 2001 - 2003  Brent R. Matzelle 
    10 // 
    11 // License: LGPL, see LICENSE 
    12 //////////////////////////////////////////////////// 
     2/*~ class.phpmailer.php 
     3.---------------------------------------------------------------------------. 
     4|  Software: PHPMailer - PHP email class                                    | 
     5|   Version: 2.0.0 rc3                                                      | 
     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'---------------------------------------------------------------------------' 
    1326 
    1427/** 
    1528 * PHPMailer - PHP email transport class 
    1629 * @package PHPMailer 
    17  * @author Brent R. Matzelle 
    18  * @copyright 2001 - 2003 Brent R. Matzelle 
     30 * @author Andy Prevost 
     31 * @copyright 2004 - 2007 Andy Prevost 
    1932 */ 
    20 class PHPMailer 
    21 
    22     ///////////////////////////////////////////////// 
    23     // PUBLIC VARIABLES 
    24     ///////////////////////////////////////////////// 
    25  
    26     /** 
    27      * Email priority (1 = High, 3 = Normal, 5 = low). 
    28      * @var int 
    29      */ 
    30     var $Priority          = 3; 
    31  
    32     /** 
    33      * Sets the CharSet of the message. 
    34      * @var string 
    35      */ 
    36     var $CharSet           = "iso-8859-1"; 
    37  
    38     /** 
    39      * Sets the Content-type of the message. 
    40      * @var string 
    41      */ 
    42     var $ContentType        = "text/plain"; 
    43  
    44     /** 
    45      * Sets the Encoding of the message. Options for this are "8bit", 
    46      * "7bit", "binary", "base64", and "quoted-printable". 
    47      * @var string 
    48      */ 
    49     var $Encoding          = "8bit"; 
    50  
    51     /** 
    52      * Holds the most recent mailer error message. 
    53      * @var string 
    54      */ 
    55     var $ErrorInfo         = ""; 
    56  
    57     /** 
    58      * Sets the From email address for the message. 
    59      * @var string 
    60      */ 
    61     var $From               = "root@localhost"; 
    62  
    63     /** 
    64      * Sets the From name of the message. 
    65      * @var string 
    66      */ 
    67     var $FromName           = "Root User"; 
    68  
    69     /** 
    70      * Sets the Sender email (Return-Path) of the message.  If not empty, 
    71      * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode. 
    72      * @var string 
    73      */ 
    74     var $Sender            = ""; 
    75  
    76     /** 
    77      * Sets the Subject of the message. 
    78      * @var string 
    79      */ 
    80     var $Subject           = ""; 
    81  
    82     /** 
    83      * Sets the Body of the message.  This can be either an HTML or text body. 
    84      * If HTML then run IsHTML(true). 
    85      * @var string 
    86      */ 
    87     var $Body               = ""; 
    88  
    89     /** 
    90      * Sets the text-only body of the message.  This automatically sets the 
    91      * email to multipart/alternative.  This body can be read by mail 
    92      * clients that do not have HTML email capability such as mutt. Clients 
    93      * that can read HTML will view the normal Body. 
    94      * @var string 
    95      */ 
    96     var $AltBody           = ""; 
    97  
    98     /** 
    99      * Sets word wrapping on the body of the message to a given number of  
    100      * characters. 
    101      * @var int 
    102      */ 
    103     var $WordWrap          = 0; 
    104  
    105     /** 
    106      * Method to send mail: ("mail", "sendmail", or "smtp"). 
    107      * @var string 
    108      */ 
    109     var $Mailer            = "mail"; 
    110  
    111     /** 
    112      * Sets the path of the sendmail program. 
    113      * @var string 
    114      */ 
    115     var $Sendmail          = "/usr/sbin/sendmail"; 
    116      
    117     /** 
    118      * Path to PHPMailer plugins.  This is now only useful if the SMTP class  
    119      * is in a different directory than the PHP include path.   
    120      * @var string 
    121      */ 
    122     var $PluginDir         = ""; 
    123  
    124     /** 
    125      *  Holds PHPMailer version. 
    126      *  @var string 
    127      */ 
    128     var $Version           = "1.73"; 
    129  
    130     /** 
    131      * Sets the email address that a reading confirmation will be sent. 
    132      * @var string 
    133      */ 
    134     var $ConfirmReadingTo  = ""; 
    135  
    136     /** 
    137      *  Sets the hostname to use in Message-Id and Received headers 
    138      *  and as default HELO string. If empty, the value returned 
    139      *  by SERVER_NAME is used or 'localhost.localdomain'. 
    140      *  @var string 
    141      */ 
    142     var $Hostname          = ""; 
    143  
    144     ///////////////////////////////////////////////// 
    145     // SMTP VARIABLES 
    146     ///////////////////////////////////////////////// 
    147  
    148     /** 
    149      *  Sets the SMTP hosts.  All hosts must be separated by a 
    150      *  semicolon.  You can also specify a different port 
    151      *  for each host by using this format: [hostname:port] 
    152      *  (e.g. "smtp1.example.com:25;smtp2.example.com"). 
    153      *  Hosts will be tried in order. 
    154      *  @var string 
    155      */ 
    156     var $Host        = "localhost"; 
    157  
    158     /** 
    159      *  Sets the default SMTP server port. 
    160      *  @var int 
    161      */ 
    162     var $Port        = 25; 
    163  
    164     /** 
    165      *  Sets the SMTP HELO of the message (Default is $Hostname). 
    166      *  @var string 
    167      */ 
    168     var $Helo        = ""; 
    169  
    170     /** 
    171      *  Sets SMTP authentication. Utilizes the Username and Password variables. 
    172      *  @var bool 
    173      */ 
    174     var $SMTPAuth     = false; 
    175  
    176     /** 
    177      *  Sets SMTP username. 
    178      *  @var string 
    179      */ 
    180     var $Username     = ""; 
    181  
    182     /** 
    183      *  Sets SMTP password. 
    184      *  @var string 
    185      */ 
    186     var $Password     = ""; 
    187  
    188     /** 
    189      *  Sets the SMTP server timeout in seconds. This function will not  
    190      *  work with the win32 version. 
    191      *  @var int 
    192      */ 
    193     var $Timeout      = 10; 
    194  
    195     /** 
    196      *  Sets SMTP class debugging on or off. 
    197      *  @var bool 
    198      */ 
    199     var $SMTPDebug    = false; 
    200  
    201     /** 
    202      * Prevents the SMTP connection from being closed after each mail  
    203      * sending.  If this is set to true then to close the connection  
    204      * requires an explicit call to SmtpClose().  
    205      * @var bool 
    206      */ 
    207     var $SMTPKeepAlive = false; 
    208  
    209     /**#@+ 
    210      * @access private 
    211      */ 
    212     var $smtp            = NULL; 
    213     var $to              = array(); 
    214     var $cc              = array(); 
    215     var $bcc             = array(); 
    216     var $ReplyTo         = array(); 
    217     var $attachment      = array(); 
    218     var $CustomHeader    = array(); 
    219     var $message_type    = ""; 
    220     var $boundary        = array(); 
    221     var $language        = array(); 
    222     var $error_count     = 0; 
    223     var $LE              = "\n"; 
    224     /**#@-*/ 
    225      
    226     ///////////////////////////////////////////////// 
    227     // VARIABLE METHODS 
    228     ///////////////////////////////////////////////// 
    229  
    230     /** 
    231      * Sets message type to HTML.   
    232      * @param bool $bool 
    233      * @return void 
    234      */ 
    235     function IsHTML($bool) { 
    236         if($bool == true) 
    237             $this->ContentType = "text/html"; 
    238         else 
    239             $this->ContentType = "text/plain"; 
    240     } 
    241  
    242     /** 
    243      * Sets Mailer to send message using SMTP. 
    244      * @return void 
    245      */ 
    246     function IsSMTP() { 
    247         $this->Mailer = "smtp"; 
    248     } 
    249  
    250     /** 
    251      * Sets Mailer to send message using PHP mail() function. 
    252      * @return void 
    253      */ 
    254     function IsMail() { 
    255         $this->Mailer = "mail"; 
    256     } 
    257  
    258     /** 
    259      * Sets Mailer to send message using the $Sendmail program. 
    260      * @return void 
    261      */ 
    262     function IsSendmail() { 
    263         $this->Mailer = "sendmail"; 
    264     } 
    265  
    266     /** 
    267      * Sets Mailer to send message using the qmail MTA.  
    268      * @return void 
    269      */ 
    270     function IsQmail() { 
    271         $this->Sendmail = "/var/qmail/bin/sendmail"; 
    272         $this->Mailer = "sendmail"; 
    273     } 
    274  
    275  
    276     ///////////////////////////////////////////////// 
    277     // RECIPIENT METHODS 
    278     ///////////////////////////////////////////////// 
    279  
    280     /** 
    281      * Adds a "To" address.   
    282      * @param string $address 
    283      * @param string $name 
    284      * @return void 
    285      */ 
    286     function AddAddress($address, $name = "") { 
    287         $cur = count($this->to); 
    288         $this->to[$cur][0] = trim($address); 
    289         $this->to[$cur][1] = $name; 
    290     } 
    291  
    292     /** 
    293      * Adds a "Cc" address. Note: this function works 
    294      * with the SMTP mailer on win32, not with the "mail" 
    295      * mailer.   
    296      * @param string $address 
    297      * @param string $name 
    298      * @return void 
    299     */ 
    300     function AddCC($address, $name = "") { 
    301         $cur = count($this->cc); 
    302         $this->cc[$cur][0] = trim($address); 
    303         $this->cc[$cur][1] = $name; 
    304     } 
    305  
    306     /** 
    307      * Adds a "Bcc" address. Note: this function works 
    308      * with the SMTP mailer on win32, not with the "mail" 
    309      * mailer.   
    310      * @param string $address 
    311      * @param string $name 
    312      * @return void 
    313      */ 
    314     function AddBCC($address, $name = "") { 
    315         $cur = count($this->bcc); 
    316         $this->bcc[$cur][0] = trim($address); 
    317         $this->bcc[$cur][1] = $name; 
    318     } 
    319  
    320     /** 
    321      * Adds a "Reply-to" address.   
    322      * @param string $address 
    323      * @param string $name 
    324      * @return void 
    325      */ 
    326     function AddReplyTo($address, $name = "") { 
    327         $cur = count($this->ReplyTo); 
    328         $this->ReplyTo[$cur][0] = trim($address); 
    329         $this->ReplyTo[$cur][1] = $name; 
    330     } 
    331  
    332  
    333     ///////////////////////////////////////////////// 
    334     // MAIL SENDING METHODS 
    335     ///////////////////////////////////////////////// 
    336  
    337     /** 
    338      * Creates message and assigns Mailer. If the message is 
    339      * not sent successfully then it returns false.  Use the ErrorInfo 
    340      * variable to view description of the error.   
    341      * @return bool 
    342      */ 
    343     function Send() { 
    344         $header = ""; 
    345         $body = ""; 
    346         $result = true; 
    347  
    348         if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) 
    349         { 
    350             $this->SetError($this->Lang("provide_address")); 
    351             return false; 
     33 
     34class PHPMailer { 
     35 
     36  ///////////////////////////////////////////////// 
     37  // PROPERTIES, PUBLIC 
     38  ///////////////////////////////////////////////// 
     39 
     40  /** 
     41   * Email priority (1 = High, 3 = Normal, 5 = low). 
     42   * @var int 
     43   */ 
     44  var $Priority          = 3; 
     45 
     46  /** 
     47   * Sets the CharSet of the message. 
     48   * @var string 
     49   */ 
     50  var $CharSet           = 'iso-8859-1'; 
     51 
     52  /** 
     53   * Sets the Content-type of the message. 
     54   * @var string 
     55   */ 
     56  var $ContentType        = 'text/plain'; 
     57 
     58  /** 
     59   * Sets the Encoding of the message. Options for this are "8bit", 
     60   * "7bit", "binary", "base64", and "quoted-printable". 
     61   * @var string 
     62   */ 
     63  var $Encoding          = '8bit'; 
     64 
     65  /** 
     66   * Holds the most recent mailer error message. 
     67   * @var string 
     68   */ 
     69  var $ErrorInfo         = ''; 
     70 
     71  /** 
     72   * Sets the From email address for the message. 
     73   * @var string 
     74   */ 
     75  var $From              = 'root@localhost'; 
     76 
     77  /** 
     78   * Sets the From name of the message. 
     79   * @var string 
     80   */ 
     81  var $FromName          = 'Root User'; 
     82 
     83  /** 
     84   * Sets the Sender email (Return-Path) of the message.  If not empty, 
     85   * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode. 
     86   * @var string 
     87   */ 
     88  var $Sender            = ''; 
     89 
     90  /** 
     91   * Sets the Subject of the message. 
     92   * @var string 
     93   */ 
     94  var $Subject           = ''; 
     95 
     96  /** 
     97   * Sets the Body of the message.  This can be either an HTML or text body. 
     98   * If HTML then run IsHTML(true). 
     99   * @var string 
     100   */ 
     101  var $Body              = ''; 
     102 
     103  /** 
     104   * Sets the text-only body of the message.  This automatically sets the 
     105   * email to multipart/alternative.  This body can be read by mail 
     106   * clients that do not have HTML email capability such as mutt. Clients 
     107   * that can read HTML will view the normal Body. 
     108   * @var string 
     109   */ 
     110  var $AltBody           = ''; 
     111 
     112  /** 
     113   * Sets word wrapping on the body of the message to a given number of 
     114   * characters. 
     115   * @var int 
     116   */ 
     117  var $WordWrap          = 0; 
     118 
     119  /** 
     120   * Method to send mail: ("mail", "sendmail", or "smtp"). 
     121   * @var string 
     122   */ 
     123  var $Mailer            = 'mail'; 
     124 
     125  /** 
     126   * Sets the path of the sendmail program. 
     127   * @var string 
     128   */ 
     129  var $Sendmail          = '/usr/sbin/sendmail'; 
     130 
     131  /** 
     132   * Path to PHPMailer plugins.  This is now only useful if the SMTP class 
     133   * is in a different directory than the PHP include path. 
     134   * @var string 
     135   */ 
     136  var $PluginDir         = ''; 
     137 
     138  /** 
     139   * Holds PHPMailer version. 
     140   * @var string 
     141   */ 
     142  var $Version           = "2.0.0 rc3"; 
     143 
     144  /** 
     145   * Sets the email address that a reading confirmation will be sent. 
     146   * @var string 
     147   */ 
     148  var $ConfirmReadingTo  = ''; 
     149 
     150  /** 
     151   * Sets the hostname to use in Message-Id and Received headers 
     152   * and as default HELO string. If empty, the value returned 
     153   * by SERVER_NAME is used or 'localhost.localdomain'. 
     154   * @var string 
     155   */ 
     156  var $Hostname          = ''; 
     157 
     158  ///////////////////////////////////////////////// 
     159  // PROPERTIES FOR SMTP 
     160  ///////////////////////////////////////////////// 
     161 
     162  /** 
     163   * Sets the SMTP hosts.  All hosts must be separated by a 
     164   * semicolon.  You can also specify a different port 
     165   * for each host by using this format: [hostname:port] 
     166   * (e.g. "smtp1.example.com:25;smtp2.example.com"). 
     167   * Hosts will be tried in order. 
     168   * @var string 
     169   */ 
     170  var $Host        = 'localhost'; 
     171 
     172  /** 
     173   * Sets the default SMTP server port. 
     174   * @var int 
     175   */ 
     176  var $Port        = 25; 
     177 
     178  /** 
     179   * Sets the SMTP HELO of the message (Default is $Hostname). 
     180   * @var string 
     181   */ 
     182  var $Helo        = ''; 
     183 
     184  /** 
     185   * Sets connection prefix. 
     186   * Options are "", "ssl" or "tls" 
     187   * @var string 
     188   */ 
     189  var $SMTPSecure = ""; 
     190 
     191  /** 
     192   * Sets SMTP authentication. Utilizes the Username and Password variables. 
     193   * @var bool 
     194   */ 
     195  var $SMTPAuth     = false; 
     196 
     197  /** 
     198   * Sets SMTP username. 
     199   * @var string 
     200   */ 
     201  var $Username     = ''; 
     202 
     203  /** 
     204   * Sets SMTP password. 
     205   * @var string 
     206   */ 
     207  var $Password     = ''; 
     208 
     209  /** 
     210   * Sets the SMTP server timeout in seconds. This function will not 
     211   * work with the win32 version. 
     212   * @var int 
     213   */ 
     214  var $Timeout      = 10; 
     215 
     216  /** 
     217   * Sets SMTP class debugging on or off. 
     218   * @var bool 
     219   */ 
     220  var $SMTPDebug    = false; 
     221 
     222  /** 
     223   * Prevents the SMTP connection from being closed after each mail 
     224   * sending.  If this is set to true then to close the connection 
     225   * requires an explicit call to SmtpClose(). 
     226   * @var bool 
     227   */ 
     228  var $SMTPKeepAlive = false; 
     229 
     230  /** 
     231   * Provides the ability to have the TO field process individual 
     232   * emails, instead of sending to entire TO addresses 
     233   * @var bool 
     234   */ 
     235  var $SingleTo = false; 
     236 
     237  ///////////////////////////////////////////////// 
     238  // PROPERTIES, PRIVATE 
     239  ///////////////////////////////////////////////// 
     240 
     241  var $smtp            = NULL; 
     242  var $to              = array(); 
     243  var $cc              = array(); 
     244  var $bcc             = array(); 
     245  var $ReplyTo         = array(); 
     246  var $attachment      = array(); 
     247  var $CustomHeader    = array(); 
     248  var $message_type    = ''; 
     249  var $boundary        = array(); 
     250  var $language        = array(); 
     251  var $error_count     = 0; 
     252  var $LE              = "\n"; 
     253 
     254  ///////////////////////////////////////////////// 
     255  // METHODS, VARIABLES 
     256  ///////////////////////////////////////////////// 
     257 
     258  /** 
     259   * Sets message type to HTML. 
     260   * @param bool $bool 
     261   * @return void 
     262   */ 
     263  function IsHTML($bool) { 
     264    if($bool == true) { 
     265      $this->ContentType = 'text/html'; 
     266    } else { 
     267      $this->ContentType = 'text/plain'; 
     268    } 
     269  } 
     270 
     271  /** 
     272   * Sets Mailer to send message using SMTP. 
     273   * @return void 
     274   */ 
     275  function IsSMTP() { 
     276    $this->Mailer = 'smtp'; 
     277  } 
     278 
     279  /** 
     280   * Sets Mailer to send message using PHP mail() function. 
     281   * @return void 
     282   */ 
     283  function IsMail() { 
     284    $this->Mailer = 'mail'; 
     285  } 
     286 
     287  /** 
     288   * Sets Mailer to send message using the $Sendmail program. 
     289   * @return void 
     290   */ 
     291  function IsSendmail() { 
     292    $this->Mailer = 'sendmail'; 
     293  } 
     294 
     295  /** 
     296   * Sets Mailer to send message using the qmail MTA. 
     297   * @return void 
     298   */ 
     299  function IsQmail() { 
     300    $this->Sendmail = '/var/qmail/bin/sendmail'; 
     301    $this->Mailer = 'sendmail'; 
     302  } 
     303 
     304  ///////////////////////////////////////////////// 
     305  // METHODS, RECIPIENTS 
     306  ///////////////////////////////////////////////// 
     307 
     308  /** 
     309   * Adds a "To" address. 
     310   * @param string $address 
     311   * @param string $name 
     312   * @return void 
     313   */ 
     314  function AddAddress($address, $name = '') { 
     315    $cur = count($this->to); 
     316    $this->to[$cur][0] = trim($address); 
     317    $this->to[$cur][1] = $name; 
     318  } 
     319 
     320  /** 
     321   * Adds a "Cc" address. Note: this function works 
     322   * with the SMTP mailer on win32, not with the "mail" 
     323   * mailer. 
     324   * @param string $address 
     325   * @param string $name 
     326   * @return void 
     327   */ 
     328  function AddCC($address, $name = '') { 
     329    $cur = count($this->cc); 
     330    $this->cc[$cur][0] = trim($address); 
     331    $this->cc[$cur][1] = $name; 
     332  } 
     333 
     334  /** 
     335   * Adds a "Bcc" address. Note: this function works 
     336   * with the SMTP mailer on win32, not with the "mail" 
     337   * mailer. 
     338   * @param string $address 
     339   * @param string $name 
     340   * @return void 
     341   */ 
     342  function AddBCC($address, $name = '') { 
     343    $cur = count($this->bcc); 
     344    $this->bcc[$cur][0] = trim($address); 
     345    $this->bcc[$cur][1] = $name; 
     346  } 
     347 
     348  /** 
     349   * Adds a "Reply-To" address. 
     350   * @param string $address 
     351   * @param string $name 
     352   * @return void 
     353   */ 
     354  function AddReplyTo($address, $name = '') { 
     355    $cur = count($this->ReplyTo); 
     356    $this->ReplyTo[$cur][0] = trim($address); 
     357    $this->ReplyTo[$cur][1] = $name; 
     358  } 
     359 
     360  ///////////////////////////////////////////////// 
     361  // METHODS, MAIL SENDING 
     362  ///////////////////////////////////////////////// 
     363 
     364  /** 
     365   * Creates message and assigns Mailer. If the message is 
     366   * not sent successfully then it returns false.  Use the ErrorInfo 
     367   * variable to view description of the error. 
     368   * @return bool 
     369   */ 
     370  function Send() { 
     371    $header = ''; 
     372    $body = ''; 
     373    $result = true; 
     374 
     375    if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { 
     376      $this->SetError($this->Lang('provide_address')); 
     377      return false; 
     378    } 
     379 
     380    /* Set whether the message is multipart/alternative */ 
     381    if(!empty($this->AltBody)) { 
     382      $this->ContentType = 'multipart/alternative'; 
     383    } 
     384 
     385    $this->error_count = 0; // reset errors 
     386    $this->SetMessageType(); 
     387    $header .= $this->CreateHeader(); 
     388    $body = $this->CreateBody(); 
     389 
     390    if($body == '') { 
     391      return false; 
     392    } 
     393 
     394    /* Choose the mailer */ 
     395    switch($this->Mailer) { 
     396      case 'sendmail': 
     397        $result = $this->SendmailSend($header, $body); 
     398        break; 
     399      case 'smtp': 
     400        $result = $this->SmtpSend($header, $body); 
     401        break; 
     402      case 'mail': 
     403        $result = $this->MailSend($header, $body); 
     404        break; 
     405      default: 
     406        $result = $this->MailSend($header, $body); 
     407        break; 
     408        //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported')); 
     409        //$result = false; 
     410        //break; 
     411    } 
     412 
     413    return $result; 
     414  } 
     415 
     416  /** 
     417   * Sends mail using the $Sendmail program. 
     418   * @access private 
     419   * @return bool 
     420   */ 
     421  function SendmailSend($header, $body) { 
     422    if ($this->Sender != '') { 
     423      $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); 
     424    } else { 
     425      $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); 
     426    } 
     427 
     428    if(!@$mail = popen($sendmail, 'w')) { 
     429      $this->SetError($this->Lang('execute') . $this->Sendmail); 
     430      return false; 
     431    } 
     432 
     433    fputs($mail, $header); 
     434    fputs($mail, $body); 
     435 
     436    $result = pclose($mail) >> 8 & 0xFF; 
     437    if($result != 0) { 
     438      $this->SetError($this->Lang('execute') . $this->Sendmail); 
     439      return false; 
     440    } 
     441 
     442    return true; 
     443  } 
     444 
     445  /** 
     446   * Sends mail using the PHP mail() function. 
     447   * @access private 
     448   * @return bool 
     449   */ 
     450  function MailSend($header, $body) { 
     451 
     452    $to = ''; 
     453    for($i = 0; $i < count($this->to); $i++) { 
     454      if($i != 0) { $to .= ', '; } 
     455      $to .= $this->AddrFormat($this->to[$i]); 
     456    } 
     457 
     458    $toArr = split(',', $to); 
     459 
     460    if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { 
     461      $old_from = ini_get('sendmail_from'); 
     462      ini_set('sendmail_from', $this->Sender); 
     463      $params = sprintf("-oi -f %s", $this->Sender); 
     464      if ($this->SingleTo === true && count($toArr) > 1) { 
     465        foreach ($toArr as $key => $val) { 
     466          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); 
    352467        } 
    353  
    354         // Set whether the message is multipart/alternative 
    355         if(!empty($this->AltBody)) 
    356             $this->ContentType = "multipart/alternative"; 
    357  
    358         $this->error_count = 0; // reset errors 
    359         $this->SetMessageType(); 
    360         $header .= $this->CreateHeader(); 
    361         $body = $this->CreateBody(); 
    362  
    363         if($body == "") { return false; } 
    364  
    365         // Choose the mailer 
    366         switch($this->Mailer) 
    367         { 
    368             case "sendmail": 
    369                 $result = $this->SendmailSend($header, $body); 
    370                 break; 
    371             case "mail": 
    372                 $result = $this->MailSend($header, $body); 
    373                 break; 
    374             case "smtp": 
    375                 $result = $this->SmtpSend($header, $body); 
    376                 break; 
    377             default: 
    378             $this->SetError($this->Mailer . $this->Lang("mailer_not_supported")); 
    379                 $result = false; 
    380                 break; 
     468      } else { 
     469        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); 
     470      } 
     471    } else { 
     472      if ($this->SingleTo === true && count($toArr) > 1) { 
     473        foreach ($toArr as $key => $val) { 
     474          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); 
    381475        } 
    382  
    383         return $result; 
    384     } 
    385      
    386     /** 
    387      * Sends mail using the $Sendmail program.   
    388      * @access private 
    389      * @return bool 
    390      */ 
    391     function SendmailSend($header, $body) { 
    392         if ($this->Sender != "") 
    393             $sendmail = sprintf("%s -oi -f %s -t", $this->Sendmail, $this->Sender); 
    394         else 
    395             $sendmail = sprintf("%s -oi -t", $this->Sendmail); 
    396  
    397         if(!@$mail = popen($sendmail, "w")) 
    398         { 
    399             $this->SetError($this->Lang("execute") . $this->Sendmail); 
    400             return false; 
     476      } else { 
     477        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); 
     478      } 
     479    } 
     480 
     481    if (isset($old_from)) { 
     482      ini_set('sendmail_from', $old_from); 
     483    } 
     484 
     485    if(!$rt) { 
     486      $this->SetError($this->Lang('instantiate')); 
     487      return false; 
     488    } 
     489 
     490    return true; 
     491  } 
     492 
     493  /** 
     494   * Sends mail via SMTP using PhpSMTP (Author: 
     495   * Chris Ryan).  Returns bool.  Returns false if there is a 
     496   * bad MAIL FROM, RCPT, or DATA input. 
     497   * @access private 
     498   * @return bool 
     499   */ 
     500  function SmtpSend($header, $body) { 
     501    include_once($this->PluginDir . 'class.smtp.php'); 
     502    $error = ''; 
     503    $bad_rcpt = array(); 
     504 
     505    if(!$this->SmtpConnect()) { 
     506      return false; 
     507    } 
     508 
     509    $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; 
     510    if(!$this->smtp->Mail($smtp_from)) { 
     511      $error = $this->Lang('from_failed') . $smtp_from; 
     512      $this->SetError($error); 
     513      $this->smtp->Reset(); 
     514      return false; 
     515    } 
     516 
     517    /* Attempt to send attach all recipients */ 
     518    for($i = 0; $i < count($this->to); $i++) { 
     519      if(!$this->smtp->Recipient($this->to[$i][0])) { 
     520        $bad_rcpt[] = $this->to[$i][0]; 
     521      } 
     522    } 
     523    for($i = 0; $i < count($this->cc); $i++) { 
     524      if(!$this->smtp->Recipient($this->cc[$i][0])) { 
     525        $bad_rcpt[] = $this->cc[$i][0]; 
     526      } 
     527    } 
     528    for($i = 0; $i < count($this->bcc); $i++) { 
     529      if(!$this->smtp->Recipient($this->bcc[$i][0])) { 
     530        $bad_rcpt[] = $this->bcc[$i][0]; 
     531      } 
     532    } 
     533 
     534    if(count($bad_rcpt) > 0) { // Create error message 
     535      for($i = 0; $i < count($bad_rcpt); $i++) { 
     536        if($i != 0) { 
     537          $error .= ', '; 
    401538        } 
    402  
    403         fputs($mail, $header); 
    404         fputs($mail, $body); 
    405          
    406         $result = pclose($mail) >> 8 & 0xFF; 
    407         if($result != 0) 
    408         { 
    409             $this->SetError($this->Lang("execute") . $this->Sendmail); 
    410             return false; 
     539        $error .= $bad_rcpt[$i]; 
     540      } 
     541      $error = $this->Lang('recipients_failed') . $error; 
     542      $this->SetError($error); 
     543      $this->smtp->Reset(); 
     544      return false; 
     545    } 
     546 
     547    if(!$this->smtp->Data($header . $body)) { 
     548      $this->SetError($this->Lang('data_not_accepted')); 
     549      $this->smtp->Reset(); 
     550      return false; 
     551    } 
     552    if($this->SMTPKeepAlive == true) { 
     553      $this->smtp->Reset(); 
     554    } else { 
     555      $this->SmtpClose(); 
     556    } 
     557 
     558    return true; 
     559  } 
     560 
     561  /** 
     562   * Initiates a connection to an SMTP server.  Returns false if the 
     563   * operation failed. 
     564   * @access private 
     565   * @return bool 
     566   */ 
     567  function SmtpConnect() { 
     568    if($this->smtp == NULL) { 
     569      $this->smtp = new SMTP(); 
     570    } 
     571 
     572    $this->smtp->do_debug = $this->SMTPDebug; 
     573    $hosts = explode(';', $this->Host); 
     574    $index = 0; 
     575    $connection = ($this->smtp->Connected()); 
     576 
     577    /* Retry while there is no connection */ 
     578    while($index < count($hosts) && $connection == false) { 
     579      $hostinfo = array(); 
     580      if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) { 
     581        $host = $hostinfo[1]; 
     582        $port = $hostinfo[2]; 
     583      } else { 
     584        $host = $hosts[$index]; 
     585        $port = $this->Port; 
     586      } 
     587 
     588      if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':'').$host, $port, $this->Timeout)) { 
     589        if ($this->Helo != '') { 
     590          $this->smtp->Hello($this->Helo); 
     591        } else { 
     592          $this->smtp->Hello($this->ServerHostname()); 
    411593        } 
    412594 
    413         return true; 
    414     } 
    415  
    416     /** 
    417      * Sends mail using the PHP mail() function.   
    418      * @access private 
    419      * @return bool 
    420      */ 
    421     function MailSend($header, $body) { 
    422         $to = ""; 
    423         for($i = 0; $i < count($this->to); $i++) 
    424         { 
    425             if($i != 0) { $to .= ", "; } 
    426             $to .= $this->to[$i][0]; 
     595        $connection = true; 
     596        if($this->SMTPAuth) { 
     597          if(!$this->smtp->Authenticate($this->Username, $this->Password)) { 
     598            $this->SetError($this->Lang('authenticate')); 
     599            $this->smtp->Reset(); 
     600            $connection = false; 
     601          } 
    427602        } 
    428  
    429         if ($this->Sender != "" && strlen(ini_get("safe_mode"))< 1) 
    430         { 
    431             $old_from = ini_get("sendmail_from"); 
    432             ini_set("sendmail_from", $this->Sender); 
    433             $params = sprintf("-oi -f %s", $this->Sender); 
    434             $rt = @mail($to, $this->EncodeHeader($this->Subject), $body,  
    435                         $header, $params); 
     603      } 
     604      $index++; 
     605    } 
     606    if(!$connection) { 
     607      $this->SetError($this->Lang('connect_host')); 
     608    } 
     609 
     610    return $connection; 
     611  } 
     612 
     613  /** 
     614   * Closes the active SMTP session if one exists. 
     615   * @return void 
     616   */ 
     617  function SmtpClose() { 
     618    if($this->smtp != NULL) { 
     619      if($this->smtp->Connected()) { 
     620        $this->smtp->Quit(); 
     621        $this->smtp->Close(); 
     622      } 
     623    } 
     624  } 
     625 
     626  /** 
     627   * Sets the language for all class error messages.  Returns false 
     628   * if it cannot load the language file.  The default language type 
     629   * is English. 
     630   * @param string $lang_type Type of language (e.g. Portuguese: "br") 
     631   * @param string $lang_path Path to the language file directory 
     632   * @access public 
     633   * @return bool 
     634   */ 
     635  function SetLanguage($lang_type, $lang_path = 'language/') { 
     636    if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) { 
     637      include($lang_path.'phpmailer.lang-'.$lang_type.'.php'); 
     638    } elseif (file_exists($lang_path.'phpmailer.lang-en.php')) { 
     639      include($lang_path.'phpmailer.lang-en.php'); 
     640    } else { 
     641      $this->SetError('Could not load language file'); 
     642      return false; 
     643    } 
     644    $this->language = $PHPMAILER_LANG; 
     645 
     646    return true; 
     647  } 
     648 
     649  ///////////////////////////////////////////////// 
     650  // METHODS, MESSAGE CREATION 
     651  ///////////////////////////////////////////////// 
     652 
     653  /** 
     654   * Creates recipient headers. 
     655   * @access private 
     656   * @return string 
     657   */ 
     658  function AddrAppend($type, $addr) { 
     659    $addr_str = $type . ': '; 
     660    $addr_str .= $this->AddrFormat($addr[0]); 
     661    if(count($addr) > 1) { 
     662      for($i = 1; $i < count($addr); $i++) { 
     663        $addr_str .= ', ' . $this->AddrFormat($addr[$i]); 
     664      } 
     665    } 
     666    $addr_str .= $this->LE; 
     667 
     668    return $addr_str; 
     669  } 
     670 
     671  /** 
     672   * Formats an address correctly. 
     673   * @access private 
     674   * @return string 
     675   */ 
     676  function AddrFormat($addr) { 
     677    if(empty($addr[1])) { 
     678      $formatted = $this->SecureHeader($addr[0]); 
     679    } else { 
     680      $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; 
     681    } 
     682 
     683    return $formatted; 
     684  } 
     685 
     686  /** 
     687   * Wraps message for use with mailers that do not 
     688   * automatically perform wrapping and for quoted-printable. 
     689   * Original written by philippe. 
     690   * @access private 
     691   * @return string 
     692   */ 
     693  function WrapText($message, $length, $qp_mode = false) { 
     694    $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; 
     695 
     696    $message = $this->FixEOL($message); 
     697    if (substr($message, -1) == $this->LE) { 
     698      $message = substr($message, 0, -1); 
     699    } 
     700 
     701    $line = explode($this->LE, $message); 
     702    $message = ''; 
     703    for ($i=0 ;$i < count($line); $i++) { 
     704      $line_part = explode(' ', $line[$i]); 
     705      $buf = ''; 
     706      for ($e = 0; $e<count($line_part); $e++) { 
     707        $word = $line_part[$e]; 
     708        if ($qp_mode and (strlen($word) > $length)) { 
     709          $space_left = $length - strlen($buf) - 1; 
     710          if ($e != 0) { 
     711            if ($space_left > 20) { 
     712              $len = $space_left; 
     713              if (substr($word, $len - 1, 1) == '=') { 
     714                $len--; 
     715              } elseif (substr($word, $len - 2, 1) == '=') { 
     716                $len -= 2; 
     717              } 
     718              $part = substr($word, 0, $len); 
     719              $word = substr($word, $len); 
     720              $buf .= ' ' . $part; 
     721              $message .= $buf . sprintf("=%s", $this->LE); 
     722            } else { 
     723              $message .= $buf . $soft_break; 
     724            } 
     725            $buf = ''; 
     726          } 
     727          while (strlen($word) > 0) { 
     728            $len = $length; 
     729            if (substr($word, $len - 1, 1) == '=') { 
     730              $len--; 
     731            } elseif (substr($word, $len - 2, 1) == '=') { 
     732              $len -= 2; 
     733            } 
     734            $part = substr($word, 0, $len); 
     735            $word = substr($word, $len); 
     736 
     737            if (strlen($word) > 0) { 
     738              $message .= $part . sprintf("=%s", $this->LE); 
     739            } else { 
     740              $buf = $part; 
     741            } 
     742          } 
     743        } else { 
     744          $buf_o = $buf; 
     745          $buf .= ($e == 0) ? $word : (' ' . $word); 
     746 
     747          if (strlen($buf) > $length and $buf_o != '') { 
     748            $message .= $buf_o . $soft_break; 
     749            $buf = $word; 
     750          } 
    436751        } 
    437         else 
    438             $rt = @m