Ignore:
Timestamp:
2011/01/17 14:46:37 (13 years ago)
Author:
Seasoft
Message:

#403(インクルードしているライブラリ群をバージョンアップする)

  • PEAR::Mail 1.2.0
  • PEAR::Net_SMTP 1.4.4
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/module/Mail/smtp.php

    r18253 r19942  
    11<?php 
    2 // 
    3 // +----------------------------------------------------------------------+ 
    4 // | PHP Version 4                                                        | 
    5 // +----------------------------------------------------------------------+ 
    6 // | Copyright (c) 1997-2003 The PHP Group                                | 
    7 // +----------------------------------------------------------------------+ 
    8 // | This source file is subject to version 2.02 of the PHP license,      | 
    9 // | that is bundled with this package in the file LICENSE, and is        | 
    10 // | available at through the world-wide-web at                           | 
    11 // | http://www.php.net/license/2_02.txt.                                 | 
    12 // | If you did not receive a copy of the PHP license and are unable to   | 
    13 // | obtain it through the world-wide-web, please send a note to          | 
    14 // | license@php.net so we can mail you a copy immediately.               | 
    15 // +----------------------------------------------------------------------+ 
    16 // | Authors: Chuck Hagenbuch <chuck@horde.org>                           | 
    17 // |          Jon Parise <jon@php.net>                                    | 
    18 // +----------------------------------------------------------------------+ 
     2/** 
     3 * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. 
     4 * 
     5 * PHP versions 4 and 5 
     6 * 
     7 * LICENSE: 
     8 * 
     9 * Copyright (c) 2010, Chuck Hagenbuch 
     10 * All rights reserved. 
     11 * 
     12 * Redistribution and use in source and binary forms, with or without 
     13 * modification, are permitted provided that the following conditions 
     14 * are met: 
     15 * 
     16 * o Redistributions of source code must retain the above copyright 
     17 *   notice, this list of conditions and the following disclaimer. 
     18 * o Redistributions in binary form must reproduce the above copyright 
     19 *   notice, this list of conditions and the following disclaimer in the 
     20 *   documentation and/or other materials provided with the distribution. 
     21 * o The names of the authors may not be used to endorse or promote 
     22 *   products derived from this software without specific prior written 
     23 *   permission. 
     24 * 
     25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
     26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
     27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
     28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
     29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
     30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
     31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
     32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
     33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
     34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
     35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     36 * 
     37 * @category    HTTP 
     38 * @package     HTTP_Request 
     39 * @author      Jon Parise <jon@php.net>  
     40 * @author      Chuck Hagenbuch <chuck@horde.org> 
     41 * @copyright   2010 Chuck Hagenbuch 
     42 * @license     http://opensource.org/licenses/bsd-license.php New BSD License 
     43 * @version     CVS: $Id: smtp.php 294747 2010-02-08 08:18:33Z clockwerx $ 
     44 * @link        http://pear.php.net/package/Mail/ 
     45 */ 
    1946 
    2047/** Error: Failed to create a Net_SMTP object */ 
     
    4370 * @access public 
    4471 * @package Mail 
    45  * @version $Revision: 1.28 $ 
     72 * @version $Revision: 294747 $ 
    4673 */ 
    4774class Mail_smtp extends Mail { 
     
    5683 
    5784    /** 
     85     * The list of service extension parameters to pass to the Net_SMTP 
     86     * mailFrom() command. 
     87     * @var array 
     88     */ 
     89    var $_extparams = array(); 
     90 
     91    /** 
    5892     * The SMTP host to connect to. 
    5993     * @var string 
     
    108142 
    109143    /** 
    110      * Whether to use VERP or not. If not a boolean, the string value 
    111      * will be used as the VERP separators. 
    112      * 
    113      * @var mixed boolean or string 
    114      */ 
    115     var $verp = false; 
    116  
    117     /** 
    118144     * Turn on Net_SMTP debugging? 
    119145     * 
     
    129155     */ 
    130156    var $persist = false; 
     157 
     158    /** 
     159     * Use SMTP command pipelining (specified in RFC 2920) if the SMTP server 
     160     * supports it. This speeds up delivery over high-latency connections. By 
     161     * default, use the default value supplied by Net_SMTP. 
     162     * @var bool 
     163     */ 
     164    var $pipelining; 
    131165 
    132166    /** 
     
    143177     *     timeout     The SMTP connection timeout. Defaults to none. 
    144178     *     verp        Whether to use VERP or not. Defaults to false. 
     179     *                 DEPRECATED as of 1.2.0 (use setMailParams()). 
    145180     *     debug       Activate SMTP debug mode? Defaults to false. 
    146181     *     persist     Should the SMTP connection persist? 
     182     *     pipelining  Use SMTP command pipelining 
    147183     * 
    148184     * If a parameter is present in the $params array, it replaces the 
     
    162198        if (isset($params['localhost'])) $this->localhost = $params['localhost']; 
    163199        if (isset($params['timeout'])) $this->timeout = $params['timeout']; 
    164         if (isset($params['verp'])) $this->verp = $params['verp']; 
    165         if (isset($params['debug'])) $this->debug = (boolean)$params['debug']; 
    166         if (isset($params['persist'])) $this->persist = (boolean)$params['persist']; 
     200        if (isset($params['debug'])) $this->debug = (bool)$params['debug']; 
     201        if (isset($params['persist'])) $this->persist = (bool)$params['persist']; 
     202        if (isset($params['pipelining'])) $this->pipelining = (bool)$params['pipelining']; 
     203 
     204        // Deprecated options 
     205        if (isset($params['verp'])) { 
     206            $this->addServiceExtensionParameter('XVERP', is_bool($params['verp']) ? null : $params['verp']); 
     207        } 
    167208 
    168209        register_shutdown_function(array(&$this, '_Mail_smtp')); 
     
    195236     * 
    196237     * @param string $body The full text of the message body, including any 
    197      *               Mime parts, etc. 
     238     *               MIME parts, etc. 
    198239     * 
    199240     * @return mixed Returns true on success, or a PEAR_Error 
     
    204245    function send($recipients, $headers, $body) 
    205246    { 
    206         $include_dir = realpath(dirname( __FILE__)); 
    207         include_once $include_dir . "/../Net/SMTP.php"; 
    208  
    209247        /* If we don't already have an SMTP object, create one. */ 
    210         if (is_object($this->_smtp) === false) { 
    211             $this->_smtp =& new Net_SMTP($this->host, $this->port, 
    212                                          $this->localhost); 
    213  
    214             /* If we still don't have an SMTP object at this point, fail. */ 
    215             if (is_object($this->_smtp) === false) { 
    216                 return PEAR::raiseError('Failed to create a Net_SMTP object', 
    217                                         PEAR_MAIL_SMTP_ERROR_CREATE); 
    218             } 
    219  
    220             /* Configure the SMTP connection. */ 
    221             if ($this->debug) { 
    222                 $this->_smtp->setDebug(true); 
    223             } 
    224  
    225             /* Attempt to connect to the configured SMTP server. */ 
    226             if (PEAR::isError($res = $this->_smtp->connect($this->timeout))) { 
    227                 $error = $this->_error('Failed to connect to ' . 
    228                                        $this->host . ':' . $this->port, 
    229                                        $res); 
    230                 return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_CONNECT); 
    231             } 
    232  
    233             /* Attempt to authenticate if authentication has been enabled. */ 
    234             if ($this->auth) { 
    235                 $method = is_string($this->auth) ? $this->auth : ''; 
    236  
    237                 if (PEAR::isError($res = $this->_smtp->auth($this->username, 
    238                                                             $this->password, 
    239                                                             $method))) { 
    240                     $error = $this->_error("$method authentication failure", 
    241                                            $res); 
    242                     $this->_smtp->rset(); 
    243                     return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_AUTH); 
    244                 } 
    245             } 
     248        $result = &$this->getSMTPObject(); 
     249        if (PEAR::isError($result)) { 
     250            return $result; 
     251        } 
     252 
     253        if (!is_array($headers)) { 
     254            return PEAR::raiseError('$headers must be an array'); 
    246255        } 
    247256 
    248257        $this->_sanitizeHeaders($headers); 
     258 
    249259        $headerElements = $this->prepareHeaders($headers); 
    250         if (PEAR::isError($headerElements)) { 
     260        if (is_a($headerElements, 'PEAR_Error')) { 
    251261            $this->_smtp->rset(); 
    252262            return $headerElements; 
     
    267277        } 
    268278 
    269         $args['verp'] = $this->verp; 
    270         if (PEAR::isError($res = $this->_smtp->mailFrom($from, $args))) { 
     279        $params = null; 
     280        if (!empty($this->_extparams)) { 
     281            foreach ($this->_extparams as $key => $val) { 
     282                $params .= ' ' . $key . (is_null($val) ? '' : '=' . $val); 
     283            } 
     284        } 
     285        if (PEAR::isError($res = $this->_smtp->mailFrom($from, ltrim($params)))) { 
    271286            $error = $this->_error("Failed to set sender: $from", $res); 
    272287            $this->_smtp->rset(); 
     
    275290 
    276291        $recipients = $this->parseRecipients($recipients); 
    277         if (PEAR::isError($recipients)) { 
     292        if (is_a($recipients, 'PEAR_Error')) { 
    278293            $this->_smtp->rset(); 
    279294            return $recipients; 
     
    281296 
    282297        foreach ($recipients as $recipient) { 
    283             if (PEAR::isError($res = $this->_smtp->rcptTo($recipient))) { 
    284                 $error = $this->_error("Failed to add recipient: $recipient", 
    285                                       $res); 
     298            $res = $this->_smtp->rcptTo($recipient); 
     299            if (is_a($res, 'PEAR_Error')) { 
     300                $error = $this->_error("Failed to add recipient: $recipient", $res); 
    286301                $this->_smtp->rset(); 
    287302                return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_RECIPIENT); 
     
    290305 
    291306        /* Send the message's headers and the body as SMTP data. */ 
    292         if (PEAR::isError($res = $this->_smtp->data($textHeaders . "\r\n\r\n" . $body))) { 
     307        $res = $this->_smtp->data($textHeaders . "\r\n\r\n" . $body); 
     308        list(,$args) = $this->_smtp->getResponse(); 
     309 
     310        if (preg_match("/Ok: queued as (.*)/", $args, $queued)) { 
     311            $this->queued_as = $queued[1]; 
     312        } 
     313 
     314        /* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to. 
     315         * ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */ 
     316        $this->greeting = $this->_smtp->getGreeting(); 
     317 
     318        if (is_a($res, 'PEAR_Error')) { 
    293319            $error = $this->_error('Failed to send data', $res); 
    294320            $this->_smtp->rset(); 
     
    305331 
    306332    /** 
     333     * Connect to the SMTP server by instantiating a Net_SMTP object. 
     334     * 
     335     * @return mixed Returns a reference to the Net_SMTP object on success, or 
     336     *               a PEAR_Error containing a descriptive error message on 
     337     *               failure. 
     338     * 
     339     * @since  1.2.0 
     340     * @access public 
     341     */ 
     342    function &getSMTPObject() 
     343    { 
     344        if (is_object($this->_smtp) !== false) { 
     345            return $this->_smtp; 
     346        } 
     347 
     348        include_once 'Net/SMTP.php'; 
     349        $this->_smtp = &new Net_SMTP($this->host, 
     350                                     $this->port, 
     351                                     $this->localhost); 
     352 
     353        /* If we still don't have an SMTP object at this point, fail. */ 
     354        if (is_object($this->_smtp) === false) { 
     355            return PEAR::raiseError('Failed to create a Net_SMTP object', 
     356                                    PEAR_MAIL_SMTP_ERROR_CREATE); 
     357        } 
     358 
     359        /* Configure the SMTP connection. */ 
     360        if ($this->debug) { 
     361            $this->_smtp->setDebug(true); 
     362        } 
     363 
     364        /* Attempt to connect to the configured SMTP server. */ 
     365        if (PEAR::isError($res = $this->_smtp->connect($this->timeout))) { 
     366            $error = $this->_error('Failed to connect to ' . 
     367                                   $this->host . ':' . $this->port, 
     368                                   $res); 
     369            return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_CONNECT); 
     370        } 
     371 
     372        /* Attempt to authenticate if authentication has been enabled. */ 
     373        if ($this->auth) { 
     374            $method = is_string($this->auth) ? $this->auth : ''; 
     375 
     376            if (PEAR::isError($res = $this->_smtp->auth($this->username, 
     377                                                        $this->password, 
     378                                                        $method))) { 
     379                $error = $this->_error("$method authentication failure", 
     380                                       $res); 
     381                $this->_smtp->rset(); 
     382                return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_AUTH); 
     383            } 
     384        } 
     385 
     386        return $this->_smtp; 
     387    } 
     388 
     389    /** 
     390     * Add parameter associated with a SMTP service extension. 
     391     * 
     392     * @param string Extension keyword. 
     393     * @param string Any value the keyword needs. 
     394     * 
     395     * @since 1.2.0 
     396     * @access public 
     397     */ 
     398    function addServiceExtensionParameter($keyword, $value = null) 
     399    { 
     400        $this->_extparams[$keyword] = $value; 
     401    } 
     402 
     403    /** 
    307404     * Disconnect and destroy the current SMTP connection. 
    308405     * 
     
    340437 
    341438        /* Build our standardized error string. */ 
    342         $msg = $text; 
    343         $msg .= ' [SMTP: ' . $error->getMessage(); 
    344         $msg .= " (code: $code, response: $response)]"; 
    345  
    346         return $msg; 
     439        return $text 
     440            . ' [SMTP: ' . $error->getMessage() 
     441            . " (code: $code, response: $response)]"; 
    347442    } 
    348443 
Note: See TracChangeset for help on using the changeset viewer.