mail.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 567 行

SVN-BASE
567
字号
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_Mail * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** * Zend_Mail_Exception */require_once 'Zend/Mail/Exception.php';/** * Zend_Mail_Transport_Abstract */require_once 'Zend/Mail/Transport/Abstract.php';/** * Zend_Mime */require_once 'Zend/Mime.php';/** * Zend_Mail_Transport_Abstract */require_once 'Zend/Mail/Transport/Abstract.php';/** * Zend_Mime_Message */require_once 'Zend/Mime/Message.php';/** * Zend_Mime_Part */require_once 'Zend/Mime/Part.php';/** * Class for sending an email. * * @category   Zend * @package    Zend_Mail * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_Mail extends Zend_Mime_Message{    /**#@+     * @access protected     */    /**     * @var Zend_Mail_Transport_Abstract     * @static     */    static protected $_defaultTransport = null;    /**     * Mail character set     * @var string     */    protected $_charset = null;    /**     * Mail headers     * @var array     */    protected $_headers = array();    /**     * From: address     * @var string     */    protected $_from = null;    /**     * To: addresses     * @var array     */    protected $_to = array();    /**     * Array of all recipients     * @var array     */    protected $_recipients = array();    /**     * Return-Path header     * @var string      */    protected $_returnPath = null;    /**     * Subject: header     * @var string     */    protected $_subject = null;    /**     * text/plain MIME part     * @var false|Zend_Mime_Part     */    protected $_bodyText = false;    /**     * text/html MIME part     * @var false|Zend_Mime_Part     */    protected $_bodyHtml = false;    /**     * MIME boundary string     * @var string     */    protected $_mimeBoundary = null;    /**#@-*/    /**     * Flag: whether or not email has attachments     * @var boolean     * @access public     */    public $hasAttachments = false;    /**     * Sets the default mail transport for all following uses of     * Zend_Mail::send();     *     * @todo Allow passing a string to indicate the transport to load     * @todo Allow passing in optional options for the transport to load     * @param  Zend_Mail_Transport_Abstract $transport     */    static public function setDefaultTransport(Zend_Mail_Transport_Abstract $transport)    {        self::$_defaultTransport = $transport;    }    /**     * Public constructor     *     * @param string $charset     */    public function __construct($charset='iso-8859-1')    {        $this->_charset = $charset;    }    /**     * Return charset string     *      * @access public     * @return string     */    public function getCharset()    {        return $this->_charset;    }    /**     * Set an arbitrary mime boundary for the message     *     * If not set, Zend_Mime will generate one.     *     * @param string $boundary     */    public function setMimeBoundary($boundary)    {      $this->_mimeBoundary = $boundary;    }    /**     * Return the boundary string used for the message     *     * @return string     */    public function getMimeBoundary()    {        return $this->_mimeBoundary;    }    /**     * Sets the text body for the message.     *     * @param string $txt     * @param string $charset     * @return Zend_Mime_Part    */    public function setBodyText($txt, $charset=null)    {        if ($charset === null) {            $charset = $this->_charset;        }        $mp = new Zend_Mime_Part($txt);        $mp->encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE;        $mp->type = Zend_Mime::TYPE_TEXT;        $mp->disposition = Zend_Mime::DISPOSITION_INLINE;        $mp->charset = $charset;        $this->_bodyText = $mp;        return $mp;    }    /**     * Return text body Zend_Mime_Part     *      * @access public     * @return false|Zend_Mime_Part     */    public function getBodyText()    {        return $this->_bodyText;    }    /**     * Sets the HTML body for the message     *     * @param string $html     * @param string $charset     * @return Zend_Mime_Part     */    public function setBodyHtml($html, $charset=null)    {        if ($charset === null) {            $charset = $this->_charset;        }        $mp = new Zend_Mime_Part($html);        $mp->encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE;        $mp->type = Zend_Mime::TYPE_HTML;        $mp->disposition = Zend_Mime::DISPOSITION_INLINE;        $mp->charset = $charset;        $this->_bodyHtml = $mp;        return $mp;    }    /**     * Return Zend_Mime_Part representing body HTML     *      * @access public     * @return false|Zend_Mime_Part     */    public function getBodyHtml()    {        return $this->_bodyHtml;    }    /**     * Adds an attachment to the message     *     * @param string $body     * @param string $mimeType     * @param string $disposition     * @param string $encoding     * @return Zend_Mime_Part Newly created Zend_Mime_Part object (to allow     * advanced settings)     */    public function addAttachment($body,                                  $mimeType    = Zend_Mime::TYPE_OCTETSTREAM,                                  $disposition = Zend_Mime::DISPOSITION_ATTACHMENT,                                  $encoding    = Zend_Mime::ENCODING_BASE64)    {        $mp = new Zend_Mime_Part($body);        $mp->encoding = $encoding;        $mp->type = $mimeType;        $mp->disposition = $disposition;        $this->addPart($mp);        $this->hasAttachments = true;        return $mp;    }    /**     * Return a count of message parts     *      * @access public     * @return void     */    public function getPartCount()    {        return count($this->_parts);    }    /**     * Encode header fields      *     * Encodes header content according to RFC1522 if it contains non-printable     * characters.     *     * @param string $value     * @return string     */    protected function _encodeHeader($value)    {      if (Zend_Mime::isPrintable($value)) {          return $value;      } else {          $quotedValue = Zend_Mime::encodeQuotedPrintable($value);          $quotedValue = str_replace('?', '=3F', $quotedValue);          return '=?' . $this->_charset . '?Q?' . $quotedValue . '?=';      }    }    /**     * Add a header to the message     *     * Adds a header to this message. If append is true and the header already     * exists, raises a flag indicating that the header should be appended.     *     * @param string $headerName     * @param string $value     * @param boolean $append     */    protected function _storeHeader($headerName, $value, $append=false)    {        $value = strtr($value,"\r\n\t",'???');        if (isset($this->_headers[$headerName])) {            $this->_headers[$headerName][] = $value;        } else {            $this->_headers[$headerName] = array($value);        }        if ($append) {            $this->_headers[$headerName]['append'] = true;        }    }    /**     * Add a recipient     *     * @param string $email     */    protected function _addRecipient($email, $to = false)    {        // prevent duplicates        $this->_recipients[$email] = 1;        if ($to) {            $this->_to[] = $email;        }    }    /**     * Helper function for adding a recipient and the corresponding header     *     * @param string $headerName     * @param string $name     * @param string $email     */    protected function _addRecipientAndHeader($headerName, $name, $email)    {        $email = strtr($email,"\r\n\t",'???');        $this->_addRecipient($email, ('To' == $headerName) ? true : false);        if ($name != '') {            $name = '"' . $this->_encodeHeader($name) . '" ';        }        $this->_storeHeader($headerName, $name .'<'. $email . '>', true);    }    /**     * Adds To-header and recipient     *     * @param string $name     * @param string $email     */    public function addTo($email, $name='')    {        $this->_addRecipientAndHeader('To', $name, $email);    }    /**     * Adds Cc-header and recipient     *     * @param string $name     * @param string $email     */    public function addCc($email, $name='')    {        $this->_addRecipientAndHeader('Cc', $name, $email);    }    /**     * Adds Bcc recipient     *     * @param string $email     */    public function addBcc($email)    {        $this->_addRecipientAndHeader('Bcc', '', $email);    }    /**     * Return list of recipient email addresses     *     * @return array (of strings)     */    public function getRecipients()    {        return array_keys($this->_recipients);    }    /**     * Sets From-header and sender of the message     *     * @param string $email     * @param string $name     * @throws Zend_Mail_Exception if called subsequent times     */    public function setFrom($email, $name = '')    {        if ($this->_from === null) {            $email = strtr($email,"\r\n\t",'???');            $this->_from = $email;            $this->_storeHeader('From', $this->_encodeHeader('"'.$name.'"').' <'.$email.'>', true);        } else {            throw new Zend_Mail_Exception('From Header set twice');        }    }    /**     * Returns the sender of the mail     *     * @return string     */    public function getFrom()    {        return $this->_from;    }    /**     * Sets the Return-Path header for an email     *      * @access public     * @param string $email      * @return void     * @throws Zend_Mail_Exception if set multiple times     */    public function setReturnPath($email)    {        if ($this->_returnPath === null) {            $email = strtr($email,"\r\n\t",'???');            $this->_returnPath = $email;            $this->_storeHeader('Return-Path', $email, false);        } else {            throw new Zend_Mail_Exception('Return-Path Header set twice');        }    }    /**     * Returns the current Return-Path address for the email     *     * If no Return-Path header is set, returns the value of {@link $_from}.     *      * @access public     * @return string     */    public function getReturnPath()    {        if (null !== $this->_returnPath) {            return $this->_returnPath;        }        return $this->_from;    }    /**     * Sets the subject of the message     *     * @param string $subject     */    public function setSubject($subject)    {        if ($this->_subject === null) {            $subject = strtr($subject,"\r\n\t",'???');            $this->_subject = $this->_encodeHeader($subject);            $this->_storeHeader('Subject', $this->_subject);        } else {            throw new Zend_Mail_Exception('Subject set twice');        }    }    /**     * Returns the encoded subject of the message     *     * @return string     */    public function getSubject()    {        return $this->_subject;    }    /**     * Add a custom header to the message     *     * @param string $name     * @param string $value     * @param boolean $append     * @throws Zend_Mail_Exception on attempts to create standard headers     */    public function addHeader($name, $value, $append=false)    {        if (in_array(strtolower($name), array('to', 'cc', 'bcc', 'from', 'subject', 'return-path'))) {            throw new Zend_Mail_Exception('Cannot set standard header from addHeader()');        }        $value = strtr($value,"\r\n\t",'???');        $value = $this->_encodeHeader($value);        $this->_storeHeader($name, $value, $append);    }    /**     * Return mail headers     *      * @access public     * @return void     */    public function getHeaders()    {        return $this->_headers;    }    /**     * Sends this email using the given transport or a previously     * set DefaultTransport or the internal mail function if no     * default transport had been set.     *     * @param Zend_Mail_Transport_Abstract $transport     * @return void     */    public function send($transport=null)    {        if ($transport === null) {            if (! self::$_defaultTransport instanceof Zend_Mail_Transport_Abstract) {                require_once 'Zend/Mail/Transport/Sendmail.php';                $transport = new Zend_Mail_Transport_Sendmail();            } else {                $transport = self::$_defaultTransport;            }        }        $transport->send($this);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?