web/wp-includes/class-phpmailer.php
author ymh
Fri, 12 Mar 2010 13:29:04 +0000
changeset 1 0d28b7c10758
permissions -rw-r--r--
First commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
0d28b7c10758 First commit
ymh
parents:
diff changeset
     1
<?php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     2
/*~ class.phpmailer.php
0d28b7c10758 First commit
ymh
parents:
diff changeset
     3
.---------------------------------------------------------------------------.
0d28b7c10758 First commit
ymh
parents:
diff changeset
     4
|  Software: PHPMailer - PHP email class                                    |
0d28b7c10758 First commit
ymh
parents:
diff changeset
     5
|   Version: 2.0.4                                                          |
0d28b7c10758 First commit
ymh
parents:
diff changeset
     6
|   Contact: via sourceforge.net support pages (also www.codeworxtech.com)  |
0d28b7c10758 First commit
ymh
parents:
diff changeset
     7
|      Info: http://phpmailer.sourceforge.net                               |
0d28b7c10758 First commit
ymh
parents:
diff changeset
     8
|   Support: http://sourceforge.net/projects/phpmailer/                     |
0d28b7c10758 First commit
ymh
parents:
diff changeset
     9
| ------------------------------------------------------------------------- |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    10
|    Author: Andy Prevost (project admininistrator)                         |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    11
|    Author: Brent R. Matzelle (original founder)                           |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    12
| Copyright (c) 2004-2007, Andy Prevost. All Rights Reserved.               |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    13
| Copyright (c) 2001-2003, Brent R. Matzelle                                |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    14
| ------------------------------------------------------------------------- |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    15
|   License: Distributed under the Lesser General Public License (LGPL)     |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    16
|            http://www.gnu.org/copyleft/lesser.html                        |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    17
| This program is distributed in the hope that it will be useful - WITHOUT  |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    18
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    19
| FITNESS FOR A PARTICULAR PURPOSE.                                         |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    20
| ------------------------------------------------------------------------- |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    21
| We offer a number of paid services (www.codeworxtech.com):                |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    22
| - Web Hosting on highly optimized fast and secure servers                 |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    23
| - Technology Consulting                                                   |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    24
| - Oursourcing (highly qualified programmers and graphic designers)        |
0d28b7c10758 First commit
ymh
parents:
diff changeset
    25
'---------------------------------------------------------------------------'
0d28b7c10758 First commit
ymh
parents:
diff changeset
    26
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    27
/**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    28
 * PHPMailer - PHP email transport class
0d28b7c10758 First commit
ymh
parents:
diff changeset
    29
 * @package PHPMailer
0d28b7c10758 First commit
ymh
parents:
diff changeset
    30
 * @author Andy Prevost
0d28b7c10758 First commit
ymh
parents:
diff changeset
    31
 * @copyright 2004 - 2009 Andy Prevost
0d28b7c10758 First commit
ymh
parents:
diff changeset
    32
 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    33
0d28b7c10758 First commit
ymh
parents:
diff changeset
    34
class PHPMailer {
0d28b7c10758 First commit
ymh
parents:
diff changeset
    35
0d28b7c10758 First commit
ymh
parents:
diff changeset
    36
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
    37
  // PROPERTIES, PUBLIC
0d28b7c10758 First commit
ymh
parents:
diff changeset
    38
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
    39
0d28b7c10758 First commit
ymh
parents:
diff changeset
    40
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    41
   * Email priority (1 = High, 3 = Normal, 5 = low).
0d28b7c10758 First commit
ymh
parents:
diff changeset
    42
   * @var int
0d28b7c10758 First commit
ymh
parents:
diff changeset
    43
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    44
  var $Priority          = 3;
0d28b7c10758 First commit
ymh
parents:
diff changeset
    45
0d28b7c10758 First commit
ymh
parents:
diff changeset
    46
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    47
   * Sets the CharSet of the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    48
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    49
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    50
  var $CharSet           = 'iso-8859-1';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    51
0d28b7c10758 First commit
ymh
parents:
diff changeset
    52
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    53
   * Sets the Content-type of the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    54
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    55
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    56
  var $ContentType        = 'text/plain';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    57
0d28b7c10758 First commit
ymh
parents:
diff changeset
    58
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    59
   * Sets the Encoding of the message. Options for this are "8bit",
0d28b7c10758 First commit
ymh
parents:
diff changeset
    60
   * "7bit", "binary", "base64", and "quoted-printable".
0d28b7c10758 First commit
ymh
parents:
diff changeset
    61
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    62
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    63
  var $Encoding          = '8bit';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    64
0d28b7c10758 First commit
ymh
parents:
diff changeset
    65
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    66
   * Holds the most recent mailer error message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    67
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    68
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    69
  var $ErrorInfo         = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    70
0d28b7c10758 First commit
ymh
parents:
diff changeset
    71
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    72
   * Sets the From email address for the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    73
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    74
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    75
  var $From              = 'root@localhost';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    76
0d28b7c10758 First commit
ymh
parents:
diff changeset
    77
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    78
   * Sets the From name of the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    79
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    80
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    81
  var $FromName          = 'Root User';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    82
0d28b7c10758 First commit
ymh
parents:
diff changeset
    83
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    84
   * Sets the Sender email (Return-Path) of the message.  If not empty,
0d28b7c10758 First commit
ymh
parents:
diff changeset
    85
   * will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    86
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    87
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    88
  var $Sender            = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    89
0d28b7c10758 First commit
ymh
parents:
diff changeset
    90
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    91
   * Sets the Subject of the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    92
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
    93
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
    94
  var $Subject           = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
    95
0d28b7c10758 First commit
ymh
parents:
diff changeset
    96
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
    97
   * Sets the Body of the message.  This can be either an HTML or text body.
0d28b7c10758 First commit
ymh
parents:
diff changeset
    98
   * If HTML then run IsHTML(true).
0d28b7c10758 First commit
ymh
parents:
diff changeset
    99
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   100
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   101
  var $Body              = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   102
0d28b7c10758 First commit
ymh
parents:
diff changeset
   103
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   104
   * Sets the text-only body of the message.  This automatically sets the
0d28b7c10758 First commit
ymh
parents:
diff changeset
   105
   * email to multipart/alternative.  This body can be read by mail
0d28b7c10758 First commit
ymh
parents:
diff changeset
   106
   * clients that do not have HTML email capability such as mutt. Clients
0d28b7c10758 First commit
ymh
parents:
diff changeset
   107
   * that can read HTML will view the normal Body.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   108
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   109
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   110
  var $AltBody           = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   111
0d28b7c10758 First commit
ymh
parents:
diff changeset
   112
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   113
   * Sets word wrapping on the body of the message to a given number of
0d28b7c10758 First commit
ymh
parents:
diff changeset
   114
   * characters.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   115
   * @var int
0d28b7c10758 First commit
ymh
parents:
diff changeset
   116
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   117
  var $WordWrap          = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   118
0d28b7c10758 First commit
ymh
parents:
diff changeset
   119
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   120
   * Method to send mail: ("mail", "sendmail", or "smtp").
0d28b7c10758 First commit
ymh
parents:
diff changeset
   121
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   122
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   123
  var $Mailer            = 'mail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   124
0d28b7c10758 First commit
ymh
parents:
diff changeset
   125
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   126
   * Sets the path of the sendmail program.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   127
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   128
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   129
  var $Sendmail          = '/usr/sbin/sendmail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   130
0d28b7c10758 First commit
ymh
parents:
diff changeset
   131
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   132
   * Path to PHPMailer plugins.  This is now only useful if the SMTP class
0d28b7c10758 First commit
ymh
parents:
diff changeset
   133
   * is in a different directory than the PHP include path.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   134
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   135
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   136
  var $PluginDir         = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   137
0d28b7c10758 First commit
ymh
parents:
diff changeset
   138
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   139
   * Holds PHPMailer version.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   140
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   141
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   142
  var $Version           = "2.0.4";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   143
0d28b7c10758 First commit
ymh
parents:
diff changeset
   144
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   145
   * Sets the email address that a reading confirmation will be sent.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   146
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   147
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   148
  var $ConfirmReadingTo  = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   149
0d28b7c10758 First commit
ymh
parents:
diff changeset
   150
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   151
   * Sets the hostname to use in Message-Id and Received headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
   152
   * and as default HELO string. If empty, the value returned
0d28b7c10758 First commit
ymh
parents:
diff changeset
   153
   * by SERVER_NAME is used or 'localhost.localdomain'.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   154
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   155
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   156
  var $Hostname          = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   157
0d28b7c10758 First commit
ymh
parents:
diff changeset
   158
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   159
   * Sets the message ID to be used in the Message-Id header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   160
   * If empty, a unique id will be generated.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   161
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   162
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   163
  var $MessageID         = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   164
0d28b7c10758 First commit
ymh
parents:
diff changeset
   165
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   166
  // PROPERTIES FOR SMTP
0d28b7c10758 First commit
ymh
parents:
diff changeset
   167
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   168
0d28b7c10758 First commit
ymh
parents:
diff changeset
   169
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   170
   * Sets the SMTP hosts.  All hosts must be separated by a
0d28b7c10758 First commit
ymh
parents:
diff changeset
   171
   * semicolon.  You can also specify a different port
0d28b7c10758 First commit
ymh
parents:
diff changeset
   172
   * for each host by using this format: [hostname:port]
0d28b7c10758 First commit
ymh
parents:
diff changeset
   173
   * (e.g. "smtp1.example.com:25;smtp2.example.com").
0d28b7c10758 First commit
ymh
parents:
diff changeset
   174
   * Hosts will be tried in order.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   175
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   176
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   177
  var $Host        = 'localhost';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   178
0d28b7c10758 First commit
ymh
parents:
diff changeset
   179
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   180
   * Sets the default SMTP server port.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   181
   * @var int
0d28b7c10758 First commit
ymh
parents:
diff changeset
   182
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   183
  var $Port        = 25;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   184
0d28b7c10758 First commit
ymh
parents:
diff changeset
   185
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   186
   * Sets the SMTP HELO of the message (Default is $Hostname).
0d28b7c10758 First commit
ymh
parents:
diff changeset
   187
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   188
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   189
  var $Helo        = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   190
0d28b7c10758 First commit
ymh
parents:
diff changeset
   191
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   192
   * Sets connection prefix.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   193
   * Options are "", "ssl" or "tls"
0d28b7c10758 First commit
ymh
parents:
diff changeset
   194
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   195
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   196
  var $SMTPSecure = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   197
0d28b7c10758 First commit
ymh
parents:
diff changeset
   198
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   199
   * Sets SMTP authentication. Utilizes the Username and Password variables.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   200
   * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   201
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   202
  var $SMTPAuth     = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   203
0d28b7c10758 First commit
ymh
parents:
diff changeset
   204
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   205
   * Sets SMTP username.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   206
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   207
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   208
  var $Username     = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   209
0d28b7c10758 First commit
ymh
parents:
diff changeset
   210
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   211
   * Sets SMTP password.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   212
   * @var string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   213
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   214
  var $Password     = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   215
0d28b7c10758 First commit
ymh
parents:
diff changeset
   216
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   217
   * Sets the SMTP server timeout in seconds. This function will not
0d28b7c10758 First commit
ymh
parents:
diff changeset
   218
   * work with the win32 version.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   219
   * @var int
0d28b7c10758 First commit
ymh
parents:
diff changeset
   220
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   221
  var $Timeout      = 10;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   222
0d28b7c10758 First commit
ymh
parents:
diff changeset
   223
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   224
   * Sets SMTP class debugging on or off.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   225
   * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   226
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   227
  var $SMTPDebug    = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   228
0d28b7c10758 First commit
ymh
parents:
diff changeset
   229
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   230
   * Prevents the SMTP connection from being closed after each mail
0d28b7c10758 First commit
ymh
parents:
diff changeset
   231
   * sending.  If this is set to true then to close the connection
0d28b7c10758 First commit
ymh
parents:
diff changeset
   232
   * requires an explicit call to SmtpClose().
0d28b7c10758 First commit
ymh
parents:
diff changeset
   233
   * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   234
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   235
  var $SMTPKeepAlive = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   236
0d28b7c10758 First commit
ymh
parents:
diff changeset
   237
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   238
   * Provides the ability to have the TO field process individual
0d28b7c10758 First commit
ymh
parents:
diff changeset
   239
   * emails, instead of sending to entire TO addresses
0d28b7c10758 First commit
ymh
parents:
diff changeset
   240
   * @var bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   241
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   242
  var $SingleTo = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   243
0d28b7c10758 First commit
ymh
parents:
diff changeset
   244
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   245
  // PROPERTIES, PRIVATE
0d28b7c10758 First commit
ymh
parents:
diff changeset
   246
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   247
0d28b7c10758 First commit
ymh
parents:
diff changeset
   248
  var $smtp            = NULL;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   249
  var $to              = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   250
  var $cc              = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   251
  var $bcc             = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   252
  var $ReplyTo         = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   253
  var $attachment      = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   254
  var $CustomHeader    = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   255
  var $message_type    = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   256
  var $boundary        = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   257
  var $language        = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   258
  var $error_count     = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   259
  var $LE              = "\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   260
  var $sign_cert_file  = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   261
  var $sign_key_file   = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   262
  var $sign_key_pass   = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   263
0d28b7c10758 First commit
ymh
parents:
diff changeset
   264
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   265
  // METHODS, VARIABLES
0d28b7c10758 First commit
ymh
parents:
diff changeset
   266
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   267
0d28b7c10758 First commit
ymh
parents:
diff changeset
   268
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   269
   * Sets message type to HTML.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   270
   * @param bool $bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   271
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   272
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   273
  function IsHTML($bool) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   274
    if($bool == true) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   275
      $this->ContentType = 'text/html';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   276
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   277
      $this->ContentType = 'text/plain';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   278
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   279
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   280
0d28b7c10758 First commit
ymh
parents:
diff changeset
   281
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   282
   * Sets Mailer to send message using SMTP.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   283
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   284
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   285
  function IsSMTP() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   286
    $this->Mailer = 'smtp';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   287
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   288
0d28b7c10758 First commit
ymh
parents:
diff changeset
   289
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   290
   * Sets Mailer to send message using PHP mail() function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   291
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   292
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   293
  function IsMail() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   294
    $this->Mailer = 'mail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   295
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   296
0d28b7c10758 First commit
ymh
parents:
diff changeset
   297
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   298
   * Sets Mailer to send message using the $Sendmail program.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   299
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   300
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   301
  function IsSendmail() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   302
    $this->Mailer = 'sendmail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   303
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   304
0d28b7c10758 First commit
ymh
parents:
diff changeset
   305
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   306
   * Sets Mailer to send message using the qmail MTA.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   307
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   308
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   309
  function IsQmail() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   310
    $this->Sendmail = '/var/qmail/bin/sendmail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   311
    $this->Mailer = 'sendmail';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   312
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   313
0d28b7c10758 First commit
ymh
parents:
diff changeset
   314
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   315
  // METHODS, RECIPIENTS
0d28b7c10758 First commit
ymh
parents:
diff changeset
   316
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   317
0d28b7c10758 First commit
ymh
parents:
diff changeset
   318
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   319
   * Adds a "To" address.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   320
   * @param string $address
0d28b7c10758 First commit
ymh
parents:
diff changeset
   321
   * @param string $name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   322
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   323
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   324
  function AddAddress($address, $name = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   325
    $cur = count($this->to);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   326
    $this->to[$cur][0] = trim($address);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   327
    $this->to[$cur][1] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   328
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   329
0d28b7c10758 First commit
ymh
parents:
diff changeset
   330
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   331
   * Adds a "Cc" address. Note: this function works
0d28b7c10758 First commit
ymh
parents:
diff changeset
   332
   * with the SMTP mailer on win32, not with the "mail"
0d28b7c10758 First commit
ymh
parents:
diff changeset
   333
   * mailer.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   334
   * @param string $address
0d28b7c10758 First commit
ymh
parents:
diff changeset
   335
   * @param string $name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   336
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   337
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   338
  function AddCC($address, $name = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   339
    $cur = count($this->cc);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   340
    $this->cc[$cur][0] = trim($address);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   341
    $this->cc[$cur][1] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   342
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   343
0d28b7c10758 First commit
ymh
parents:
diff changeset
   344
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   345
   * Adds a "Bcc" address. Note: this function works
0d28b7c10758 First commit
ymh
parents:
diff changeset
   346
   * with the SMTP mailer on win32, not with the "mail"
0d28b7c10758 First commit
ymh
parents:
diff changeset
   347
   * mailer.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   348
   * @param string $address
0d28b7c10758 First commit
ymh
parents:
diff changeset
   349
   * @param string $name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   350
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   351
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   352
  function AddBCC($address, $name = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   353
    $cur = count($this->bcc);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   354
    $this->bcc[$cur][0] = trim($address);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   355
    $this->bcc[$cur][1] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   356
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   357
0d28b7c10758 First commit
ymh
parents:
diff changeset
   358
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   359
   * Adds a "Reply-To" address.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   360
   * @param string $address
0d28b7c10758 First commit
ymh
parents:
diff changeset
   361
   * @param string $name
0d28b7c10758 First commit
ymh
parents:
diff changeset
   362
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   363
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   364
  function AddReplyTo($address, $name = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   365
    $cur = count($this->ReplyTo);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   366
    $this->ReplyTo[$cur][0] = trim($address);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   367
    $this->ReplyTo[$cur][1] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   368
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   369
0d28b7c10758 First commit
ymh
parents:
diff changeset
   370
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   371
  // METHODS, MAIL SENDING
0d28b7c10758 First commit
ymh
parents:
diff changeset
   372
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   373
0d28b7c10758 First commit
ymh
parents:
diff changeset
   374
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   375
   * Creates message and assigns Mailer. If the message is
0d28b7c10758 First commit
ymh
parents:
diff changeset
   376
   * not sent successfully then it returns false.  Use the ErrorInfo
0d28b7c10758 First commit
ymh
parents:
diff changeset
   377
   * variable to view description of the error.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   378
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   379
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   380
  function Send() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   381
    $header = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   382
    $body = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   383
    $result = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   384
0d28b7c10758 First commit
ymh
parents:
diff changeset
   385
    if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   386
      $this->SetError($this->Lang('provide_address'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   387
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   388
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   389
0d28b7c10758 First commit
ymh
parents:
diff changeset
   390
    /* Set whether the message is multipart/alternative */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   391
    if(!empty($this->AltBody)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   392
      $this->ContentType = 'multipart/alternative';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   393
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   394
0d28b7c10758 First commit
ymh
parents:
diff changeset
   395
    $this->error_count = 0; // reset errors
0d28b7c10758 First commit
ymh
parents:
diff changeset
   396
    $this->SetMessageType();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   397
    $header .= $this->CreateHeader();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   398
    $body = $this->CreateBody();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   399
0d28b7c10758 First commit
ymh
parents:
diff changeset
   400
    if($body == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   401
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   402
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   403
0d28b7c10758 First commit
ymh
parents:
diff changeset
   404
    /* Choose the mailer */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   405
    switch($this->Mailer) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   406
      case 'sendmail':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   407
        $result = $this->SendmailSend($header, $body);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   408
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   409
      case 'smtp':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   410
        $result = $this->SmtpSend($header, $body);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   411
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   412
      case 'mail':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   413
        $result = $this->MailSend($header, $body);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   414
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   415
      default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   416
        $result = $this->MailSend($header, $body);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   417
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   418
        //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   419
        //$result = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   420
        //break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   421
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   422
0d28b7c10758 First commit
ymh
parents:
diff changeset
   423
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   424
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   425
0d28b7c10758 First commit
ymh
parents:
diff changeset
   426
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   427
   * Sends mail using the $Sendmail program.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   428
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   429
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   430
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   431
  function SendmailSend($header, $body) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   432
    if ($this->Sender != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   433
      $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   434
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   435
      $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   436
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   437
0d28b7c10758 First commit
ymh
parents:
diff changeset
   438
    if(!@$mail = popen($sendmail, 'w')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   439
      $this->SetError($this->Lang('execute') . $this->Sendmail);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   440
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   441
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   442
0d28b7c10758 First commit
ymh
parents:
diff changeset
   443
    fputs($mail, $header);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   444
    fputs($mail, $body);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   445
0d28b7c10758 First commit
ymh
parents:
diff changeset
   446
    $result = pclose($mail);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   447
    if (version_compare(phpversion(), '4.2.3') == -1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   448
      $result = $result >> 8 & 0xFF;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   449
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   450
    if($result != 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   451
      $this->SetError($this->Lang('execute') . $this->Sendmail);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   452
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   453
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   454
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   455
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   456
0d28b7c10758 First commit
ymh
parents:
diff changeset
   457
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   458
   * Sends mail using the PHP mail() function.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   459
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   460
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   461
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   462
  function MailSend($header, $body) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   463
0d28b7c10758 First commit
ymh
parents:
diff changeset
   464
    $to = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   465
    for($i = 0; $i < count($this->to); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   466
      if($i != 0) { $to .= ', '; }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   467
      $to .= $this->AddrFormat($this->to[$i]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   468
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   469
0d28b7c10758 First commit
ymh
parents:
diff changeset
   470
    $toArr = split(',', $to);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   471
0d28b7c10758 First commit
ymh
parents:
diff changeset
   472
    $params = sprintf("-oi -f %s", $this->Sender);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   473
    if ($this->Sender != '' && strlen(ini_get('safe_mode')) < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   474
      $old_from = ini_get('sendmail_from');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   475
      ini_set('sendmail_from', $this->Sender);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   476
      if ($this->SingleTo === true && count($toArr) > 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   477
        foreach ($toArr as $key => $val) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   478
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   479
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   480
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   481
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   482
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   483
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   484
      if ($this->SingleTo === true && count($toArr) > 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   485
        foreach ($toArr as $key => $val) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   486
          $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   487
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   488
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   489
        $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   490
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   491
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   492
0d28b7c10758 First commit
ymh
parents:
diff changeset
   493
    if (isset($old_from)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   494
      ini_set('sendmail_from', $old_from);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   495
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   496
0d28b7c10758 First commit
ymh
parents:
diff changeset
   497
    if(!$rt) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   498
      $this->SetError($this->Lang('instantiate'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   499
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   500
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   501
0d28b7c10758 First commit
ymh
parents:
diff changeset
   502
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   503
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   504
0d28b7c10758 First commit
ymh
parents:
diff changeset
   505
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   506
   * Sends mail via SMTP using PhpSMTP (Author:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   507
   * Chris Ryan).  Returns bool.  Returns false if there is a
0d28b7c10758 First commit
ymh
parents:
diff changeset
   508
   * bad MAIL FROM, RCPT, or DATA input.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   509
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   510
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   511
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   512
  function SmtpSend($header, $body) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   513
    include_once($this->PluginDir . 'class-smtp.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   514
    $error = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   515
    $bad_rcpt = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   516
0d28b7c10758 First commit
ymh
parents:
diff changeset
   517
    if(!$this->SmtpConnect()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   518
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   519
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   520
0d28b7c10758 First commit
ymh
parents:
diff changeset
   521
    $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   522
    if(!$this->smtp->Mail($smtp_from)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   523
      $error = $this->Lang('from_failed') . $smtp_from;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   524
      $this->SetError($error);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   525
      $this->smtp->Reset();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   526
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   527
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   528
0d28b7c10758 First commit
ymh
parents:
diff changeset
   529
    /* Attempt to send attach all recipients */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   530
    for($i = 0; $i < count($this->to); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   531
      if(!$this->smtp->Recipient($this->to[$i][0])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   532
        $bad_rcpt[] = $this->to[$i][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   533
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   534
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   535
    for($i = 0; $i < count($this->cc); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   536
      if(!$this->smtp->Recipient($this->cc[$i][0])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   537
        $bad_rcpt[] = $this->cc[$i][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   538
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   539
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   540
    for($i = 0; $i < count($this->bcc); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   541
      if(!$this->smtp->Recipient($this->bcc[$i][0])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   542
        $bad_rcpt[] = $this->bcc[$i][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   543
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   544
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   545
0d28b7c10758 First commit
ymh
parents:
diff changeset
   546
    if(count($bad_rcpt) > 0) { // Create error message
0d28b7c10758 First commit
ymh
parents:
diff changeset
   547
      for($i = 0; $i < count($bad_rcpt); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   548
        if($i != 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   549
          $error .= ', ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   550
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   551
        $error .= $bad_rcpt[$i];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   552
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   553
      $error = $this->Lang('recipients_failed') . $error;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   554
      $this->SetError($error);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   555
      $this->smtp->Reset();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   556
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   557
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   558
0d28b7c10758 First commit
ymh
parents:
diff changeset
   559
    if(!$this->smtp->Data($header . $body)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   560
      $this->SetError($this->Lang('data_not_accepted'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   561
      $this->smtp->Reset();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   562
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   563
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   564
    if($this->SMTPKeepAlive == true) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   565
      $this->smtp->Reset();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   566
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   567
      $this->SmtpClose();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   568
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   569
0d28b7c10758 First commit
ymh
parents:
diff changeset
   570
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   571
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   572
0d28b7c10758 First commit
ymh
parents:
diff changeset
   573
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   574
   * Initiates a connection to an SMTP server.  Returns false if the
0d28b7c10758 First commit
ymh
parents:
diff changeset
   575
   * operation failed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   576
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   577
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   578
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   579
  function SmtpConnect() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   580
    if($this->smtp == NULL) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   581
      $this->smtp = new SMTP();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   582
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   583
0d28b7c10758 First commit
ymh
parents:
diff changeset
   584
    $this->smtp->do_debug = $this->SMTPDebug;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   585
    $hosts = explode(';', $this->Host);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   586
    $index = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   587
    $connection = ($this->smtp->Connected());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   588
0d28b7c10758 First commit
ymh
parents:
diff changeset
   589
    /* Retry while there is no connection */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   590
    while($index < count($hosts) && $connection == false) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   591
      $hostinfo = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   592
      if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   593
        $host = $hostinfo[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   594
        $port = $hostinfo[2];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   595
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   596
        $host = $hosts[$index];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   597
        $port = $this->Port;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   598
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   599
0d28b7c10758 First commit
ymh
parents:
diff changeset
   600
      if($this->smtp->Connect(((!empty($this->SMTPSecure))?$this->SMTPSecure.'://':'').$host, $port, $this->Timeout)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   601
        if ($this->Helo != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   602
          $this->smtp->Hello($this->Helo);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   603
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   604
          $this->smtp->Hello($this->ServerHostname());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   605
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   606
0d28b7c10758 First commit
ymh
parents:
diff changeset
   607
        $connection = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   608
        if($this->SMTPAuth) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   609
          if(!$this->smtp->Authenticate($this->Username, $this->Password)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   610
            $this->SetError($this->Lang('authenticate'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   611
            $this->smtp->Reset();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   612
            $connection = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   613
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   614
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   615
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   616
      $index++;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   617
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   618
    if(!$connection) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   619
      $this->SetError($this->Lang('connect_host'));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   620
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   621
0d28b7c10758 First commit
ymh
parents:
diff changeset
   622
    return $connection;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   623
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   624
0d28b7c10758 First commit
ymh
parents:
diff changeset
   625
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   626
   * Closes the active SMTP session if one exists.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   627
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   628
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   629
  function SmtpClose() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   630
    if($this->smtp != NULL) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   631
      if($this->smtp->Connected()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   632
        $this->smtp->Quit();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   633
        $this->smtp->Close();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   634
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   635
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   636
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   637
0d28b7c10758 First commit
ymh
parents:
diff changeset
   638
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   639
   * Sets the language for all class error messages.  Returns false
0d28b7c10758 First commit
ymh
parents:
diff changeset
   640
   * if it cannot load the language file.  The default language type
0d28b7c10758 First commit
ymh
parents:
diff changeset
   641
   * is English.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   642
   * @param string $lang_type Type of language (e.g. Portuguese: "br")
0d28b7c10758 First commit
ymh
parents:
diff changeset
   643
   * @param string $lang_path Path to the language file directory
0d28b7c10758 First commit
ymh
parents:
diff changeset
   644
   * @access public
0d28b7c10758 First commit
ymh
parents:
diff changeset
   645
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
   646
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   647
  function SetLanguage($lang_type, $lang_path = 'language/') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   648
    if(file_exists($lang_path.'phpmailer.lang-'.$lang_type.'.php')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   649
      include($lang_path.'phpmailer.lang-'.$lang_type.'.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   650
    } elseif (file_exists($lang_path.'phpmailer.lang-en.php')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   651
      include($lang_path.'phpmailer.lang-en.php');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   652
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   653
      $PHPMAILER_LANG = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   654
      $PHPMAILER_LANG["provide_address"]      = 'You must provide at least one ' .
0d28b7c10758 First commit
ymh
parents:
diff changeset
   655
      $PHPMAILER_LANG["mailer_not_supported"] = ' mailer is not supported.';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   656
      $PHPMAILER_LANG["execute"]              = 'Could not execute: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   657
      $PHPMAILER_LANG["instantiate"]          = 'Could not instantiate mail function.';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   658
      $PHPMAILER_LANG["authenticate"]         = 'SMTP Error: Could not authenticate.';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   659
      $PHPMAILER_LANG["from_failed"]          = 'The following From address failed: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   660
      $PHPMAILER_LANG["recipients_failed"]    = 'SMTP Error: The following ' .
0d28b7c10758 First commit
ymh
parents:
diff changeset
   661
      $PHPMAILER_LANG["data_not_accepted"]    = 'SMTP Error: Data not accepted.';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   662
      $PHPMAILER_LANG["connect_host"]         = 'SMTP Error: Could not connect to SMTP host.';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   663
      $PHPMAILER_LANG["file_access"]          = 'Could not access file: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   664
      $PHPMAILER_LANG["file_open"]            = 'File Error: Could not open file: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   665
      $PHPMAILER_LANG["encoding"]             = 'Unknown encoding: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   666
      $PHPMAILER_LANG["signing"]              = 'Signing Error: ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   667
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   668
    $this->language = $PHPMAILER_LANG;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   669
0d28b7c10758 First commit
ymh
parents:
diff changeset
   670
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   671
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   672
0d28b7c10758 First commit
ymh
parents:
diff changeset
   673
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   674
  // METHODS, MESSAGE CREATION
0d28b7c10758 First commit
ymh
parents:
diff changeset
   675
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
   676
0d28b7c10758 First commit
ymh
parents:
diff changeset
   677
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   678
   * Creates recipient headers.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   679
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   680
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   681
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   682
  function AddrAppend($type, $addr) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   683
    $addr_str = $type . ': ';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   684
    $addr_str .= $this->AddrFormat($addr[0]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   685
    if(count($addr) > 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   686
      for($i = 1; $i < count($addr); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   687
        $addr_str .= ', ' . $this->AddrFormat($addr[$i]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   688
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   689
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   690
    $addr_str .= $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   691
0d28b7c10758 First commit
ymh
parents:
diff changeset
   692
    return $addr_str;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   693
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   694
0d28b7c10758 First commit
ymh
parents:
diff changeset
   695
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   696
   * Formats an address correctly.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   697
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   698
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   699
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   700
  function AddrFormat($addr) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   701
    if(empty($addr[1])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   702
      $formatted = $this->SecureHeader($addr[0]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   703
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   704
      $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">";
0d28b7c10758 First commit
ymh
parents:
diff changeset
   705
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   706
0d28b7c10758 First commit
ymh
parents:
diff changeset
   707
    return $formatted;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   708
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   709
0d28b7c10758 First commit
ymh
parents:
diff changeset
   710
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   711
   * Wraps message for use with mailers that do not
0d28b7c10758 First commit
ymh
parents:
diff changeset
   712
   * automatically perform wrapping and for quoted-printable.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   713
   * Original written by philippe.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   714
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   715
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   716
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   717
  function WrapText($message, $length, $qp_mode = false) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   718
    $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   719
    // If utf-8 encoding is used, we will need to make sure we don't
0d28b7c10758 First commit
ymh
parents:
diff changeset
   720
    // split multibyte characters when we wrap
0d28b7c10758 First commit
ymh
parents:
diff changeset
   721
    $is_utf8 = (strtolower($this->CharSet) == "utf-8");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   722
0d28b7c10758 First commit
ymh
parents:
diff changeset
   723
    $message = $this->FixEOL($message);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   724
    if (substr($message, -1) == $this->LE) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   725
      $message = substr($message, 0, -1);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   726
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   727
0d28b7c10758 First commit
ymh
parents:
diff changeset
   728
    $line = explode($this->LE, $message);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   729
    $message = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   730
    for ($i=0 ;$i < count($line); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   731
      $line_part = explode(' ', $line[$i]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   732
      $buf = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   733
      for ($e = 0; $e<count($line_part); $e++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   734
        $word = $line_part[$e];
0d28b7c10758 First commit
ymh
parents:
diff changeset
   735
        if ($qp_mode and (strlen($word) > $length)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   736
          $space_left = $length - strlen($buf) - 1;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   737
          if ($e != 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   738
            if ($space_left > 20) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   739
              $len = $space_left;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   740
              if ($is_utf8) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   741
                $len = $this->UTF8CharBoundary($word, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   742
              } elseif (substr($word, $len - 1, 1) == "=") {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   743
                $len--;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   744
              } elseif (substr($word, $len - 2, 1) == "=") {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   745
                $len -= 2;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   746
              }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   747
              $part = substr($word, 0, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   748
              $word = substr($word, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   749
              $buf .= ' ' . $part;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   750
              $message .= $buf . sprintf("=%s", $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   751
            } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   752
              $message .= $buf . $soft_break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   753
            }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   754
            $buf = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   755
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   756
          while (strlen($word) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   757
            $len = $length;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   758
            if ($is_utf8) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   759
              $len = $this->UTF8CharBoundary($word, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   760
            } elseif (substr($word, $len - 1, 1) == "=") {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   761
              $len--;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   762
            } elseif (substr($word, $len - 2, 1) == "=") {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   763
              $len -= 2;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   764
            }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   765
            $part = substr($word, 0, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   766
            $word = substr($word, $len);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   767
0d28b7c10758 First commit
ymh
parents:
diff changeset
   768
            if (strlen($word) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   769
              $message .= $part . sprintf("=%s", $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   770
            } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   771
              $buf = $part;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   772
            }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   773
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   774
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   775
          $buf_o = $buf;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   776
          $buf .= ($e == 0) ? $word : (' ' . $word);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   777
0d28b7c10758 First commit
ymh
parents:
diff changeset
   778
          if (strlen($buf) > $length and $buf_o != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   779
            $message .= $buf_o . $soft_break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   780
            $buf = $word;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   781
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   782
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   783
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   784
      $message .= $buf . $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   785
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   786
0d28b7c10758 First commit
ymh
parents:
diff changeset
   787
    return $message;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   788
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   789
0d28b7c10758 First commit
ymh
parents:
diff changeset
   790
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   791
   * Finds last character boundary prior to maxLength in a utf-8
0d28b7c10758 First commit
ymh
parents:
diff changeset
   792
   * quoted (printable) encoded string.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   793
   * Original written by Colin Brown.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   794
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   795
   * @param string $encodedText utf-8 QP text
0d28b7c10758 First commit
ymh
parents:
diff changeset
   796
   * @param int    $maxLength   find last character boundary prior to this length
0d28b7c10758 First commit
ymh
parents:
diff changeset
   797
   * @return int
0d28b7c10758 First commit
ymh
parents:
diff changeset
   798
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   799
  function UTF8CharBoundary($encodedText, $maxLength) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   800
    $foundSplitPos = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   801
    $lookBack = 3;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   802
    while (!$foundSplitPos) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   803
      $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   804
      $encodedCharPos = strpos($lastChunk, "=");
0d28b7c10758 First commit
ymh
parents:
diff changeset
   805
      if ($encodedCharPos !== false) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   806
        // Found start of encoded character byte within $lookBack block.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   807
        // Check the encoded byte value (the 2 chars after the '=')
0d28b7c10758 First commit
ymh
parents:
diff changeset
   808
        $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   809
        $dec = hexdec($hex);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   810
        if ($dec < 128) { // Single byte character.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   811
          // If the encoded char was found at pos 0, it will fit
0d28b7c10758 First commit
ymh
parents:
diff changeset
   812
          // otherwise reduce maxLength to start of the encoded char
0d28b7c10758 First commit
ymh
parents:
diff changeset
   813
          $maxLength = ($encodedCharPos == 0) ? $maxLength :
0d28b7c10758 First commit
ymh
parents:
diff changeset
   814
          $maxLength - ($lookBack - $encodedCharPos);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   815
          $foundSplitPos = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   816
        } elseif ($dec >= 192) { // First byte of a multi byte character
0d28b7c10758 First commit
ymh
parents:
diff changeset
   817
          // Reduce maxLength to split at start of character
0d28b7c10758 First commit
ymh
parents:
diff changeset
   818
          $maxLength = $maxLength - ($lookBack - $encodedCharPos);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   819
          $foundSplitPos = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   820
        } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back
0d28b7c10758 First commit
ymh
parents:
diff changeset
   821
          $lookBack += 3;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   822
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   823
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   824
        // No encoded character found
0d28b7c10758 First commit
ymh
parents:
diff changeset
   825
        $foundSplitPos = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   826
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   827
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   828
    return $maxLength;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   829
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   830
0d28b7c10758 First commit
ymh
parents:
diff changeset
   831
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   832
   * Set the body wrapping.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   833
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   834
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
   835
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   836
  function SetWordWrap() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   837
    if($this->WordWrap < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   838
      return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   839
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   840
0d28b7c10758 First commit
ymh
parents:
diff changeset
   841
    switch($this->message_type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   842
      case 'alt':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   843
        /* fall through */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   844
      case 'alt_attachments':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   845
        $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   846
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   847
      default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
   848
        $this->Body = $this->WrapText($this->Body, $this->WordWrap);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   849
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   850
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   851
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   852
0d28b7c10758 First commit
ymh
parents:
diff changeset
   853
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   854
   * Assembles message header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   855
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   856
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   857
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   858
  function CreateHeader() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   859
    $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   860
0d28b7c10758 First commit
ymh
parents:
diff changeset
   861
    /* Set the boundaries */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   862
    $uniq_id = md5(uniqid(time()));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   863
    $this->boundary[1] = 'b1_' . $uniq_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   864
    $this->boundary[2] = 'b2_' . $uniq_id;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   865
0d28b7c10758 First commit
ymh
parents:
diff changeset
   866
    $result .= $this->HeaderLine('Date', $this->RFCDate());
0d28b7c10758 First commit
ymh
parents:
diff changeset
   867
    if($this->Sender == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   868
      $result .= $this->HeaderLine('Return-Path', trim($this->From));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   869
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   870
      $result .= $this->HeaderLine('Return-Path', trim($this->Sender));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   871
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   872
0d28b7c10758 First commit
ymh
parents:
diff changeset
   873
    /* To be created automatically by mail() */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   874
    if($this->Mailer != 'mail') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   875
      if(count($this->to) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   876
        $result .= $this->AddrAppend('To', $this->to);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   877
      } elseif (count($this->cc) == 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   878
        $result .= $this->HeaderLine('To', 'undisclosed-recipients:;');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   879
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   880
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   881
0d28b7c10758 First commit
ymh
parents:
diff changeset
   882
    $from = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   883
    $from[0][0] = trim($this->From);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   884
    $from[0][1] = $this->FromName;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   885
    $result .= $this->AddrAppend('From', $from);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   886
0d28b7c10758 First commit
ymh
parents:
diff changeset
   887
    /* sendmail and mail() extract Cc from the header before sending */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   888
    if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->cc) > 0)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   889
      $result .= $this->AddrAppend('Cc', $this->cc);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   890
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   891
0d28b7c10758 First commit
ymh
parents:
diff changeset
   892
    /* sendmail and mail() extract Bcc from the header before sending */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   893
    if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   894
      $result .= $this->AddrAppend('Bcc', $this->bcc);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   895
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   896
0d28b7c10758 First commit
ymh
parents:
diff changeset
   897
    if(count($this->ReplyTo) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   898
      $result .= $this->AddrAppend('Reply-To', $this->ReplyTo);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   899
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   900
0d28b7c10758 First commit
ymh
parents:
diff changeset
   901
    /* mail() sets the subject itself */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   902
    if($this->Mailer != 'mail') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   903
      $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   904
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   905
0d28b7c10758 First commit
ymh
parents:
diff changeset
   906
    if($this->MessageID != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   907
      $result .= $this->HeaderLine('Message-ID',$this->MessageID);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   908
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   909
      $result .= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   910
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   911
    $result .= $this->HeaderLine('X-Priority', $this->Priority);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   912
    $result .= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.sourceforge.net) [version ' . $this->Version . ']');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   913
0d28b7c10758 First commit
ymh
parents:
diff changeset
   914
    if($this->ConfirmReadingTo != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   915
      $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   916
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   917
0d28b7c10758 First commit
ymh
parents:
diff changeset
   918
    // Add custom headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
   919
    for($index = 0; $index < count($this->CustomHeader); $index++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   920
      $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1])));
0d28b7c10758 First commit
ymh
parents:
diff changeset
   921
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   922
    if (!$this->sign_key_file) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   923
      $result .= $this->HeaderLine('MIME-Version', '1.0');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   924
      $result .= $this->GetMailMIME();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   925
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   926
0d28b7c10758 First commit
ymh
parents:
diff changeset
   927
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   928
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   929
0d28b7c10758 First commit
ymh
parents:
diff changeset
   930
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   931
   * Returns the message MIME.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   932
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   933
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   934
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   935
  function GetMailMIME() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   936
    $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   937
    switch($this->message_type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   938
      case 'plain':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   939
        $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   940
        $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   941
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   942
      case 'attachments':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   943
        /* fall through */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   944
      case 'alt_attachments':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   945
        if($this->InlineImageExists()){
0d28b7c10758 First commit
ymh
parents:
diff changeset
   946
          $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   947
        } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   948
          $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   949
          $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   950
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   951
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   952
      case 'alt':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   953
        $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   954
        $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   955
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   956
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   957
0d28b7c10758 First commit
ymh
parents:
diff changeset
   958
    if($this->Mailer != 'mail') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   959
      $result .= $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   960
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   961
0d28b7c10758 First commit
ymh
parents:
diff changeset
   962
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   963
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   964
0d28b7c10758 First commit
ymh
parents:
diff changeset
   965
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
   966
   * Assembles the message body.  Returns an empty string on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
   967
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
   968
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
   969
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
   970
  function CreateBody() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   971
    $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
   972
    if ($this->sign_key_file) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   973
      $result .= $this->GetMailMIME();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   974
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
   975
0d28b7c10758 First commit
ymh
parents:
diff changeset
   976
    $this->SetWordWrap();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   977
0d28b7c10758 First commit
ymh
parents:
diff changeset
   978
    switch($this->message_type) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
   979
      case 'alt':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   980
        $result .= $this->GetBoundary($this->boundary[1], '', 'text/plain', '');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   981
        $result .= $this->EncodeString($this->AltBody, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   982
        $result .= $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   983
        $result .= $this->GetBoundary($this->boundary[1], '', 'text/html', '');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   984
        $result .= $this->EncodeString($this->Body, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   985
        $result .= $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   986
        $result .= $this->EndBoundary($this->boundary[1]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   987
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   988
      case 'plain':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   989
        $result .= $this->EncodeString($this->Body, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   990
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   991
      case 'attachments':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   992
        $result .= $this->GetBoundary($this->boundary[1], '', '', '');
0d28b7c10758 First commit
ymh
parents:
diff changeset
   993
        $result .= $this->EncodeString($this->Body, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   994
        $result .= $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   995
        $result .= $this->AttachAll();
0d28b7c10758 First commit
ymh
parents:
diff changeset
   996
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
   997
      case 'alt_attachments':
0d28b7c10758 First commit
ymh
parents:
diff changeset
   998
        $result .= sprintf("--%s%s", $this->boundary[1], $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
   999
        $result .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1000
        $result .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1001
        $result .= $this->EncodeString($this->AltBody, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1002
        $result .= $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1003
        $result .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1004
        $result .= $this->EncodeString($this->Body, $this->Encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1005
        $result .= $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1006
        $result .= $this->EndBoundary($this->boundary[2]);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1007
        $result .= $this->AttachAll();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1008
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1009
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1010
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1011
    if($this->IsError()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1012
      $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1013
    } else if ($this->sign_key_file) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1014
      $file = tempnam("", "mail");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1015
      $fp = fopen($file, "w");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1016
      fwrite($fp, $result);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1017
      fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1018
      $signed = tempnam("", "signed");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1019
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1020
      if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), null)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1021
        $fp = fopen($signed, "r");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1022
        $result = fread($fp, filesize($this->sign_key_file));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1023
        $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1024
        while(!feof($fp)){
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1025
          $result = $result . fread($fp, 1024);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1026
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1027
        fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1028
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1029
        $this->SetError($this->Lang("signing").openssl_error_string());
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1030
        $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1031
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1032
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1033
      unlink($file);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1034
      unlink($signed);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1035
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1036
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1037
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1038
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1039
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1040
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1041
   * Returns the start of a message boundary.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1042
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1043
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1044
  function GetBoundary($boundary, $charSet, $contentType, $encoding) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1045
    $result = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1046
    if($charSet == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1047
      $charSet = $this->CharSet;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1048
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1049
    if($contentType == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1050
      $contentType = $this->ContentType;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1051
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1052
    if($encoding == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1053
      $encoding = $this->Encoding;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1054
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1055
    $result .= $this->TextLine('--' . $boundary);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1056
    $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1057
    $result .= $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1058
    $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1059
    $result .= $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1060
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1061
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1062
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1063
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1064
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1065
   * Returns the end of a message boundary.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1066
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1067
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1068
  function EndBoundary($boundary) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1069
    return $this->LE . '--' . $boundary . '--' . $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1070
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1071
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1072
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1073
   * Sets the message type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1074
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1075
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1076
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1077
  function SetMessageType() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1078
    if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1079
      $this->message_type = 'plain';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1080
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1081
      if(count($this->attachment) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1082
        $this->message_type = 'attachments';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1083
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1084
      if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1085
        $this->message_type = 'alt';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1086
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1087
      if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1088
        $this->message_type = 'alt_attachments';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1089
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1090
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1091
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1092
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1093
  /* Returns a formatted header line.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1094
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1095
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1096
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1097
  function HeaderLine($name, $value) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1098
    return $name . ': ' . $value . $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1099
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1100
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1101
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1102
   * Returns a formatted mail line.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1103
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1104
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1105
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1106
  function TextLine($value) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1107
    return $value . $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1108
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1109
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1110
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1111
  // CLASS METHODS, ATTACHMENTS
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1112
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1113
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1114
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1115
   * Adds an attachment from a path on the filesystem.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1116
   * Returns false if the file could not be found
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1117
   * or accessed.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1118
   * @param string $path Path to the attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1119
   * @param string $name Overrides the attachment name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1120
   * @param string $encoding File encoding (see $Encoding).
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1121
   * @param string $type File extension (MIME) type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1122
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1123
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1124
  function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1125
    if(!@is_file($path)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1126
      $this->SetError($this->Lang('file_access') . $path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1127
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1128
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1129
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1130
    $filename = basename($path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1131
    if($name == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1132
      $name = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1133
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1134
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1135
    $cur = count($this->attachment);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1136
    $this->attachment[$cur][0] = $path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1137
    $this->attachment[$cur][1] = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1138
    $this->attachment[$cur][2] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1139
    $this->attachment[$cur][3] = $encoding;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1140
    $this->attachment[$cur][4] = $type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1141
    $this->attachment[$cur][5] = false; // isStringAttachment
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1142
    $this->attachment[$cur][6] = 'attachment';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1143
    $this->attachment[$cur][7] = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1144
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1145
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1146
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1147
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1148
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1149
   * Attaches all fs, string, and binary attachments to the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1150
   * Returns an empty string on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1151
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1152
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1153
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1154
  function AttachAll() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1155
    /* Return text of body */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1156
    $mime = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1157
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1158
    /* Add all attachments */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1159
    for($i = 0; $i < count($this->attachment); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1160
      /* Check for string attachment */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1161
      $bString = $this->attachment[$i][5];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1162
      if ($bString) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1163
        $string = $this->attachment[$i][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1164
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1165
        $path = $this->attachment[$i][0];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1166
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1167
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1168
      $filename    = $this->attachment[$i][1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1169
      $name        = $this->attachment[$i][2];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1170
      $encoding    = $this->attachment[$i][3];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1171
      $type        = $this->attachment[$i][4];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1172
      $disposition = $this->attachment[$i][6];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1173
      $cid         = $this->attachment[$i][7];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1174
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1175
      $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1176
      $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1177
      $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1178
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1179
      if($disposition == 'inline') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1180
        $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1181
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1182
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1183
      $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1184
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1185
      /* Encode as string attachment */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1186
      if($bString) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1187
        $mime[] = $this->EncodeString($string, $encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1188
        if($this->IsError()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1189
          return '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1190
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1191
        $mime[] = $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1192
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1193
        $mime[] = $this->EncodeFile($path, $encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1194
        if($this->IsError()) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1195
          return '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1196
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1197
        $mime[] = $this->LE.$this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1198
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1199
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1200
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1201
    $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1202
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1203
    return join('', $mime);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1204
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1205
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1206
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1207
   * Encodes attachment in requested format.  Returns an
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1208
   * empty string on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1209
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1210
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1211
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1212
  function EncodeFile ($path, $encoding = 'base64') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1213
    if(!@$fd = fopen($path, 'rb')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1214
      $this->SetError($this->Lang('file_open') . $path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1215
      return '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1216
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1217
    $magic_quotes = get_magic_quotes_runtime();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1218
    set_magic_quotes_runtime(0);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1219
    $file_buffer = fread($fd, filesize($path));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1220
    $file_buffer = $this->EncodeString($file_buffer, $encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1221
    fclose($fd);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1222
    set_magic_quotes_runtime($magic_quotes);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1223
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1224
    return $file_buffer;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1225
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1226
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1227
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1228
   * Encodes string to requested format. Returns an
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1229
   * empty string on failure.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1230
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1231
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1232
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1233
  function EncodeString ($str, $encoding = 'base64') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1234
    $encoded = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1235
    switch(strtolower($encoding)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1236
      case 'base64':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1237
        /* chunk_split is found in PHP >= 3.0.6 */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1238
        $encoded = chunk_split(base64_encode($str), 76, $this->LE);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1239
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1240
      case '7bit':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1241
      case '8bit':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1242
        $encoded = $this->FixEOL($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1243
        if (substr($encoded, -(strlen($this->LE))) != $this->LE)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1244
          $encoded .= $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1245
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1246
      case 'binary':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1247
        $encoded = $str;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1248
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1249
      case 'quoted-printable':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1250
        $encoded = $this->EncodeQP($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1251
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1252
      default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1253
        $this->SetError($this->Lang('encoding') . $encoding);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1254
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1255
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1256
    return $encoded;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1257
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1258
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1259
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1260
   * Encode a header string to best of Q, B, quoted or none.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1261
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1262
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1263
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1264
  function EncodeHeader ($str, $position = 'text') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1265
    $x = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1266
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1267
    switch (strtolower($position)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1268
      case 'phrase':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1269
        if (!preg_match('/[\200-\377]/', $str)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1270
          /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1271
          $encoded = addcslashes($str, "\0..\37\177\\\"");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1272
          if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1273
            return ($encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1274
          } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1275
            return ("\"$encoded\"");
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1276
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1277
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1278
        $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1279
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1280
      case 'comment':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1281
        $x = preg_match_all('/[()"]/', $str, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1282
        /* Fall-through */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1283
      case 'text':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1284
      default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1285
        $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1286
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1287
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1288
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1289
    if ($x == 0) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1290
      return ($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1291
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1292
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1293
    $maxlen = 75 - 7 - strlen($this->CharSet);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1294
    /* Try to select the encoding which should produce the shortest output */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1295
    if (strlen($str)/3 < $x) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1296
      $encoding = 'B';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1297
      if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1298
     // Use a custom function which correctly encodes and wraps long
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1299
     // multibyte strings without breaking lines within a character
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1300
        $encoded = $this->Base64EncodeWrapMB($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1301
      } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1302
        $encoded = base64_encode($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1303
        $maxlen -= $maxlen % 4;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1304
        $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1305
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1306
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1307
      $encoding = 'Q';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1308
      $encoded = $this->EncodeQ($str, $position);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1309
      $encoded = $this->WrapText($encoded, $maxlen, true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1310
      $encoded = str_replace('='.$this->LE, "\n", trim($encoded));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1311
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1312
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1313
    $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1314
    $encoded = trim(str_replace("\n", $this->LE, $encoded));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1315
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1316
    return $encoded;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1317
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1318
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1319
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1320
   * Checks if a string contains multibyte characters.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1321
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1322
   * @param string $str multi-byte text to wrap encode
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1323
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1324
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1325
  function HasMultiBytes($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1326
    if (function_exists('mb_strlen')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1327
      return (strlen($str) > mb_strlen($str, $this->CharSet));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1328
    } else { // Assume no multibytes (we can't handle without mbstring functions anyway)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1329
      return False;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1330
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1331
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1332
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1333
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1334
   * Correctly encodes and wraps long multibyte strings for mail headers
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1335
   * without breaking lines within a character.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1336
   * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1337
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1338
   * @param string $str multi-byte text to wrap encode
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1339
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1340
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1341
  function Base64EncodeWrapMB($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1342
    $start = "=?".$this->CharSet."?B?";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1343
    $end = "?=";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1344
    $encoded = "";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1345
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1346
    $mb_length = mb_strlen($str, $this->CharSet);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1347
    // Each line must have length <= 75, including $start and $end
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1348
    $length = 75 - strlen($start) - strlen($end);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1349
    // Average multi-byte ratio
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1350
    $ratio = $mb_length / strlen($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1351
    // Base64 has a 4:3 ratio
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1352
    $offset = $avgLength = floor($length * $ratio * .75);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1353
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1354
    for ($i = 0; $i < $mb_length; $i += $offset) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1355
      $lookBack = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1356
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1357
      do {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1358
        $offset = $avgLength - $lookBack;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1359
        $chunk = mb_substr($str, $i, $offset, $this->CharSet);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1360
        $chunk = base64_encode($chunk);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1361
        $lookBack++;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1362
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1363
      while (strlen($chunk) > $length);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1364
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1365
      $encoded .= $chunk . $this->LE;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1366
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1367
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1368
    // Chomp the last linefeed
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1369
    $encoded = substr($encoded, 0, -strlen($this->LE));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1370
    return $encoded;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1371
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1372
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1373
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1374
   * Encode string to quoted-printable.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1375
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1376
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1377
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1378
  function EncodeQP( $input = '', $line_max = 76, $space_conv = false ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1379
    $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1380
    $lines = preg_split('/(?:\r\n|\r|\n)/', $input);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1381
    $eol = "\r\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1382
    $escape = '=';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1383
    $output = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1384
    while( list(, $line) = each($lines) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1385
      $linlen = strlen($line);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1386
      $newline = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1387
      for($i = 0; $i < $linlen; $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1388
        $c = substr( $line, $i, 1 );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1389
        $dec = ord( $c );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1390
        if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1391
          $c = '=2E';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1392
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1393
        if ( $dec == 32 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1394
          if ( $i == ( $linlen - 1 ) ) { // convert space at eol only
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1395
            $c = '=20';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1396
          } else if ( $space_conv ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1397
            $c = '=20';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1398
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1399
        } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1400
          $h2 = floor($dec/16);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1401
          $h1 = floor($dec%16);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1402
          $c = $escape.$hex[$h2].$hex[$h1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1403
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1404
        if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1405
          $output .= $newline.$escape.$eol; //  soft line break; " =\r\n" is okay
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1406
          $newline = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1407
          // check if newline first character will be point or not
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1408
          if ( $dec == 46 ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1409
            $c = '=2E';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1410
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1411
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1412
        $newline .= $c;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1413
      } // end of for
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1414
      $output .= $newline.$eol;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1415
    } // end of while
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1416
    return $output;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1417
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1418
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1419
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1420
   * Callback for converting to "=XX".
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1421
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1422
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1423
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1424
  function EncodeQ_callback ($matches) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1425
    return sprintf('=%02X', ord($matches[1]));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1426
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1427
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1428
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1429
   * Encode string to q encoding.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1430
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1431
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1432
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1433
  function EncodeQ ($str, $position = 'text') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1434
    /* There should not be any EOL in the string */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1435
    $encoded = preg_replace("/[\r\n]/", '', $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1436
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1437
    switch (strtolower($position)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1438
      case 'phrase':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1439
        $encoded = preg_replace_callback("/([^A-Za-z0-9!*+\/ -])/",
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1440
                                         array('PHPMailer', 'EncodeQ_callback'), $encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1441
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1442
      case 'comment':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1443
        $encoded = preg_replace_callback("/([\(\)\"])/",
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1444
                                         array('PHPMailer', 'EncodeQ_callback'), $encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1445
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1446
      case 'text':
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1447
      default:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1448
        /* Replace every high ascii, control =, ? and _ characters */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1449
        $encoded = preg_replace_callback('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1450
                                         array('PHPMailer', 'EncodeQ_callback'), $encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1451
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1452
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1453
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1454
    /* Replace every spaces to _ (more readable than =20) */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1455
    $encoded = str_replace(' ', '_', $encoded);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1456
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1457
    return $encoded;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1458
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1459
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1460
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1461
   * Adds a string or binary attachment (non-filesystem) to the list.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1462
   * This method can be used to attach ascii or binary data,
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1463
   * such as a BLOB record from a database.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1464
   * @param string $string String attachment data.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1465
   * @param string $filename Name of the attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1466
   * @param string $encoding File encoding (see $Encoding).
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1467
   * @param string $type File extension (MIME) type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1468
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1469
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1470
  function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1471
    /* Append to $attachment array */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1472
    $cur = count($this->attachment);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1473
    $this->attachment[$cur][0] = $string;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1474
    $this->attachment[$cur][1] = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1475
    $this->attachment[$cur][2] = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1476
    $this->attachment[$cur][3] = $encoding;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1477
    $this->attachment[$cur][4] = $type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1478
    $this->attachment[$cur][5] = true; // isString
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1479
    $this->attachment[$cur][6] = 'attachment';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1480
    $this->attachment[$cur][7] = 0;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1481
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1482
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1483
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1484
   * Adds an embedded attachment.  This can include images, sounds, and
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1485
   * just about any other document.  Make sure to set the $type to an
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1486
   * image type.  For JPEG images use "image/jpeg" and for GIF images
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1487
   * use "image/gif".
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1488
   * @param string $path Path to the attachment.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1489
   * @param string $cid Content ID of the attachment.  Use this to identify
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1490
   *        the Id for accessing the image in an HTML form.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1491
   * @param string $name Overrides the attachment name.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1492
   * @param string $encoding File encoding (see $Encoding).
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1493
   * @param string $type File extension (MIME) type.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1494
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1495
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1496
  function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1497
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1498
    if(!@is_file($path)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1499
      $this->SetError($this->Lang('file_access') . $path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1500
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1501
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1502
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1503
    $filename = basename($path);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1504
    if($name == '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1505
      $name = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1506
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1507
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1508
    /* Append to $attachment array */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1509
    $cur = count($this->attachment);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1510
    $this->attachment[$cur][0] = $path;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1511
    $this->attachment[$cur][1] = $filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1512
    $this->attachment[$cur][2] = $name;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1513
    $this->attachment[$cur][3] = $encoding;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1514
    $this->attachment[$cur][4] = $type;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1515
    $this->attachment[$cur][5] = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1516
    $this->attachment[$cur][6] = 'inline';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1517
    $this->attachment[$cur][7] = $cid;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1518
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1519
    return true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1520
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1521
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1522
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1523
   * Returns true if an inline attachment is present.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1524
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1525
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1526
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1527
  function InlineImageExists() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1528
    $result = false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1529
    for($i = 0; $i < count($this->attachment); $i++) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1530
      if($this->attachment[$i][6] == 'inline') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1531
        $result = true;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1532
        break;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1533
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1534
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1535
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1536
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1537
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1538
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1539
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1540
  // CLASS METHODS, MESSAGE RESET
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1541
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1542
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1543
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1544
   * Clears all recipients assigned in the TO array.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1545
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1546
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1547
  function ClearAddresses() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1548
    $this->to = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1549
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1550
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1551
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1552
   * Clears all recipients assigned in the CC array.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1553
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1554
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1555
  function ClearCCs() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1556
    $this->cc = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1557
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1558
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1559
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1560
   * Clears all recipients assigned in the BCC array.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1561
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1562
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1563
  function ClearBCCs() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1564
    $this->bcc = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1565
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1566
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1567
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1568
   * Clears all recipients assigned in the ReplyTo array.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1569
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1570
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1571
  function ClearReplyTos() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1572
    $this->ReplyTo = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1573
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1574
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1575
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1576
   * Clears all recipients assigned in the TO, CC and BCC
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1577
   * array.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1578
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1579
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1580
  function ClearAllRecipients() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1581
    $this->to = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1582
    $this->cc = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1583
    $this->bcc = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1584
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1585
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1586
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1587
   * Clears all previously set filesystem, string, and binary
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1588
   * attachments.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1589
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1590
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1591
  function ClearAttachments() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1592
    $this->attachment = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1593
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1594
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1595
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1596
   * Clears all custom headers.  Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1597
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1598
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1599
  function ClearCustomHeaders() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1600
    $this->CustomHeader = array();
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1601
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1602
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1603
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1604
  // CLASS METHODS, MISCELLANEOUS
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1605
  /////////////////////////////////////////////////
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1606
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1607
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1608
   * Adds the error message to the error container.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1609
   * Returns void.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1610
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1611
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1612
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1613
  function SetError($msg) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1614
    $this->error_count++;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1615
    $this->ErrorInfo = $msg;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1616
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1617
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1618
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1619
   * Returns the proper RFC 822 formatted date.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1620
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1621
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1622
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1623
  function RFCDate() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1624
    $tz = date('Z');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1625
    $tzs = ($tz < 0) ? '-' : '+';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1626
    $tz = abs($tz);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1627
    $tz = (int)($tz/3600)*100 + ($tz%3600)/60;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1628
    $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1629
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1630
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1631
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1632
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1633
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1634
   * Returns the appropriate server variable.  Should work with both
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1635
   * PHP 4.1.0+ as well as older versions.  Returns an empty string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1636
   * if nothing is found.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1637
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1638
   * @return mixed
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1639
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1640
  function ServerVar($varName) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1641
    global $HTTP_SERVER_VARS;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1642
    global $HTTP_ENV_VARS;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1643
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1644
    if(!isset($_SERVER)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1645
      $_SERVER = $HTTP_SERVER_VARS;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1646
      if(!isset($_SERVER['REMOTE_ADDR'])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1647
        $_SERVER = $HTTP_ENV_VARS; // must be Apache
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1648
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1649
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1650
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1651
    if(isset($_SERVER[$varName])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1652
      return $_SERVER[$varName];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1653
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1654
      return '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1655
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1656
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1657
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1658
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1659
   * Returns the server hostname or 'localhost.localdomain' if unknown.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1660
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1661
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1662
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1663
  function ServerHostname() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1664
    if ($this->Hostname != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1665
      $result = $this->Hostname;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1666
    } elseif ($this->ServerVar('SERVER_NAME') != '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1667
      $result = $this->ServerVar('SERVER_NAME');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1668
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1669
      $result = 'localhost.localdomain';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1670
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1671
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1672
    return $result;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1673
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1674
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1675
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1676
   * Returns a message in the appropriate language.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1677
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1678
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1679
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1680
  function Lang($key) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1681
    if(count($this->language) < 1) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1682
      $this->SetLanguage('en'); // set the default language
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1683
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1684
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1685
    if(isset($this->language[$key])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1686
      return $this->language[$key];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1687
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1688
      return 'Language string failed to load: ' . $key;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1689
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1690
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1691
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1692
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1693
   * Returns true if an error occurred.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1694
   * @return bool
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1695
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1696
  function IsError() {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1697
    return ($this->error_count > 0);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1698
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1699
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1700
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1701
   * Changes every end of line from CR or LF to CRLF.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1702
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1703
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1704
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1705
  function FixEOL($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1706
    $str = str_replace("\r\n", "\n", $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1707
    $str = str_replace("\r", "\n", $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1708
    $str = str_replace("\n", $this->LE, $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1709
    return $str;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1710
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1711
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1712
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1713
   * Adds a custom header.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1714
   * @return void
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1715
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1716
  function AddCustomHeader($custom_header) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1717
    $this->CustomHeader[] = explode(':', $custom_header, 2);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1718
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1719
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1720
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1721
   * Evaluates the message and returns modifications for inline images and backgrounds
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1722
   * @access public
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1723
   * @return $message
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1724
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1725
  function MsgHTML($message,$basedir='') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1726
    preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1727
    if(isset($images[2])) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1728
      foreach($images[2] as $i => $url) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1729
        // do not change urls for absolute images (thanks to corvuscorax)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1730
        if (!preg_match('/^[A-z][A-z]*:\/\//',$url)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1731
          $filename = basename($url);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1732
          $directory = dirname($url);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1733
          ($directory == '.')?$directory='':'';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1734
          $cid = 'cid:' . md5($filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1735
          $fileParts = split("\.", $filename);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1736
          $ext = $fileParts[1];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1737
          $mimeType = $this->_mime_types($ext);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1738
          if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1739
          if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1740
          if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1741
            $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1742
          }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1743
        }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1744
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1745
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1746
    $this->IsHTML(true);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1747
    $this->Body = $message;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1748
    $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message)));
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1749
    if ( !empty($textMsg) && empty($this->AltBody) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1750
      $this->AltBody = html_entity_decode($textMsg);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1751
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1752
    if ( empty($this->AltBody) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1753
      $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n";
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1754
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1755
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1756
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1757
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1758
   * Gets the mime type of the embedded or inline image
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1759
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1760
   * @return mime type of ext
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1761
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1762
  function _mime_types($ext = '') {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1763
    $mimes = array(
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1764
      'ai'    =>  'application/postscript',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1765
      'aif'   =>  'audio/x-aiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1766
      'aifc'  =>  'audio/x-aiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1767
      'aiff'  =>  'audio/x-aiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1768
      'avi'   =>  'video/x-msvideo',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1769
      'bin'   =>  'application/macbinary',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1770
      'bmp'   =>  'image/bmp',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1771
      'class' =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1772
      'cpt'   =>  'application/mac-compactpro',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1773
      'css'   =>  'text/css',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1774
      'dcr'   =>  'application/x-director',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1775
      'dir'   =>  'application/x-director',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1776
      'dll'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1777
      'dms'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1778
      'doc'   =>  'application/msword',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1779
      'dvi'   =>  'application/x-dvi',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1780
      'dxr'   =>  'application/x-director',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1781
      'eml'   =>  'message/rfc822',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1782
      'eps'   =>  'application/postscript',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1783
      'exe'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1784
      'gif'   =>  'image/gif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1785
      'gtar'  =>  'application/x-gtar',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1786
      'htm'   =>  'text/html',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1787
      'html'  =>  'text/html',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1788
      'jpe'   =>  'image/jpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1789
      'jpeg'  =>  'image/jpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1790
      'jpg'   =>  'image/jpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1791
      'hqx'   =>  'application/mac-binhex40',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1792
      'js'    =>  'application/x-javascript',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1793
      'lha'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1794
      'log'   =>  'text/plain',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1795
      'lzh'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1796
      'mid'   =>  'audio/midi',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1797
      'midi'  =>  'audio/midi',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1798
      'mif'   =>  'application/vnd.mif',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1799
      'mov'   =>  'video/quicktime',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1800
      'movie' =>  'video/x-sgi-movie',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1801
      'mp2'   =>  'audio/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1802
      'mp3'   =>  'audio/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1803
      'mpe'   =>  'video/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1804
      'mpeg'  =>  'video/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1805
      'mpg'   =>  'video/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1806
      'mpga'  =>  'audio/mpeg',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1807
      'oda'   =>  'application/oda',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1808
      'pdf'   =>  'application/pdf',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1809
      'php'   =>  'application/x-httpd-php',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1810
      'php3'  =>  'application/x-httpd-php',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1811
      'php4'  =>  'application/x-httpd-php',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1812
      'phps'  =>  'application/x-httpd-php-source',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1813
      'phtml' =>  'application/x-httpd-php',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1814
      'png'   =>  'image/png',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1815
      'ppt'   =>  'application/vnd.ms-powerpoint',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1816
      'ps'    =>  'application/postscript',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1817
      'psd'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1818
      'qt'    =>  'video/quicktime',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1819
      'ra'    =>  'audio/x-realaudio',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1820
      'ram'   =>  'audio/x-pn-realaudio',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1821
      'rm'    =>  'audio/x-pn-realaudio',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1822
      'rpm'   =>  'audio/x-pn-realaudio-plugin',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1823
      'rtf'   =>  'text/rtf',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1824
      'rtx'   =>  'text/richtext',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1825
      'rv'    =>  'video/vnd.rn-realvideo',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1826
      'sea'   =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1827
      'shtml' =>  'text/html',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1828
      'sit'   =>  'application/x-stuffit',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1829
      'so'    =>  'application/octet-stream',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1830
      'smi'   =>  'application/smil',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1831
      'smil'  =>  'application/smil',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1832
      'swf'   =>  'application/x-shockwave-flash',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1833
      'tar'   =>  'application/x-tar',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1834
      'text'  =>  'text/plain',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1835
      'txt'   =>  'text/plain',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1836
      'tgz'   =>  'application/x-tar',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1837
      'tif'   =>  'image/tiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1838
      'tiff'  =>  'image/tiff',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1839
      'wav'   =>  'audio/x-wav',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1840
      'wbxml' =>  'application/vnd.wap.wbxml',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1841
      'wmlc'  =>  'application/vnd.wap.wmlc',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1842
      'word'  =>  'application/msword',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1843
      'xht'   =>  'application/xhtml+xml',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1844
      'xhtml' =>  'application/xhtml+xml',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1845
      'xl'    =>  'application/excel',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1846
      'xls'   =>  'application/vnd.ms-excel',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1847
      'xml'   =>  'text/xml',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1848
      'xsl'   =>  'text/xml',
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1849
      'zip'   =>  'application/zip'
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1850
    );
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1851
    return ( ! isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)];
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1852
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1853
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1854
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1855
   * Set (or reset) Class Objects (variables)
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1856
   *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1857
   * Usage Example:
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1858
   * $page->set('X-Priority', '3');
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1859
   *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1860
   * @access public
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1861
   * @param string $name Parameter Name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1862
   * @param mixed $value Parameter Value
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1863
   * NOTE: will not work with arrays, there are no arrays to set/reset
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1864
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1865
  function set ( $name, $value = '' ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1866
    if ( isset($this->$name) ) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1867
      $this->$name = $value;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1868
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1869
      $this->SetError('Cannot set or reset variable ' . $name);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1870
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1871
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1872
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1873
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1874
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1875
   * Read a file from a supplied filename and return it.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1876
   *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1877
   * @access public
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1878
   * @param string $filename Parameter File Name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1879
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1880
  function getFile($filename) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1881
    $return = '';
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1882
    if ($fp = fopen($filename, 'rb')) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1883
      while (!feof($fp)) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1884
        $return .= fread($fp, 1024);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1885
      }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1886
      fclose($fp);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1887
      return $return;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1888
    } else {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1889
      return false;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1890
    }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1891
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1892
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1893
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1894
   * Strips newlines to prevent header injection.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1895
   * @access private
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1896
   * @param string $str String
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1897
   * @return string
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1898
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1899
  function SecureHeader($str) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1900
    $str = trim($str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1901
    $str = str_replace("\r", "", $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1902
    $str = str_replace("\n", "", $str);
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1903
    return $str;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1904
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1905
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1906
  /**
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1907
   * Set the private key file and password to sign the message.
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1908
   *
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1909
   * @access public
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1910
   * @param string $key_filename Parameter File Name
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1911
   * @param string $key_pass Password for private key
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1912
   */
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1913
  function Sign($cert_filename, $key_filename, $key_pass) {
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1914
    $this->sign_cert_file = $cert_filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1915
    $this->sign_key_file = $key_filename;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1916
    $this->sign_key_pass = $key_pass;
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1917
  }
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1918
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1919
}
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1920
0d28b7c10758 First commit
ymh
parents:
diff changeset
  1921
?>