Zend Framework入门教程之Zend_Mail用法示例


Posted in PHP onDecember 08, 2016

本文实例讲述了Zend Framework入门教程之Zend_Mail用法。分享给大家供大家参考,具体如下:

Zend_Mail组件提供了通用化的功能来创建和发送文本。

Zend_Mail通过PHP内建的mail()函数或者直接通过SMTP连接来发送邮件。

一个简单的邮件由收件人、主题、邮件内容以及发件人等内容组成。

步骤如下

1.创建对象
2.设置邮件内容
3.发送

案例:

<?php
require_once "Zend/Mail.php";
$my_mail = new Zend_Mail();             //创建一个对象
$my_mail->addTo("jiqing9006@126.com","jim");    //添加一个收件人
$my_mail->setSubject("Just a test");        //设置主题
$my_mail->setBodyText("Hello Jim!");        //为邮件设置正文内容
$my_mail->setFrom("706507884@qq.com","jiqing");   //为邮件设置发件人
echo "邮件设置完毕";
echo "<p>";
echo "邮件收件人为:";
$result = $my_mail->getHeaders();
echo $result['To'][0];
echo "<p>";
echo "邮件主题为:";
echo $my_mail->getSubject();
echo "<p>";
echo "邮件内容为:";
$result = $my_mail->getBodyText();
echo $result->getContent();
echo "<p>";
echo "邮件发件人为:";
echo $my_mail->getFrom();
echo "<p>";
$my_mail->send();

结果:

邮件设置完毕
邮件收件人为:jim
邮件主题为:Just a test
邮件内容为:Hello Jim!
邮件发件人为:706507884@qq.com

Fatal error: Uncaught exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()' in C:\zend\library\Zend\Mail\Transport\Sendmail.php:137 Stack trace: #0 C:\zend\library\Zend\Mail\Transport\Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail() #1 C:\zend\library\Zend\Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) #2 D:\xampp\htdocs\test.php(24): Zend_Mail->send() #3 {main} thrown in C:\zend\library\Zend\Mail\Transport\Sendmail.php on line 137

点评:

这里执行不能成功,是因为没有配置好Mail服务器。

源码分析:

<?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-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license  http://framework.zend.com/license/new-bsd   New BSD License
 * @version  $Id: Mail.php 24593 2012-01-05 20:35:02Z matthew $
 */
/**
 * @see Zend_Mail_Transport_Abstract
 */
require_once 'Zend/Mail/Transport/Abstract.php';
/**
 * @see Zend_Mime
 */
require_once 'Zend/Mime.php';
/**
 * @see Zend_Mime_Message
 */
require_once 'Zend/Mime/Message.php';
/**
 * @see Zend_Mime_Part
 */
require_once 'Zend/Mime/Part.php';
/**
 * Class for sending an email.
 *
 * @category  Zend
 * @package  Zend_Mail
 * @copyright Copyright (c) 2005-2012 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
   */
  protected static $_defaultTransport = null;
  /**
   * @var array
   * @static
   */
  protected static $_defaultFrom;
  /**
   * @var array
   * @static
   */
  protected static $_defaultReplyTo;
  /**
   * Mail character set
   * @var string
   */
  protected $_charset = 'iso-8859-1';
  /**
   * Mail headers
   * @var array
   */
  protected $_headers = array();
  /**
   * Encoding of Mail headers
   * @var string
   */
  protected $_headerEncoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE;
  /**
   * From: address
   * @var string
   */
  protected $_from = null;
  /**
   * To: addresses
   * @var array
   */
  protected $_to = array();
  /**
   * Array of all recipients
   * @var array
   */
  protected $_recipients = array();
  /**
   * Reply-To header
   * @var string
   */
  protected $_replyTo = null;
  /**
   * Return-Path header
   * @var string
   */
  protected $_returnPath = null;
  /**
   * Subject: header
   * @var string
   */
  protected $_subject = null;
  /**
   * Date: header
   * @var string
   */
  protected $_date = null;
  /**
   * Message-ID: header
   * @var string
   */
  protected $_messageId = 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;
  /**
   * Content type of the message
   * @var string
   */
  protected $_type = null;
  /**#@-*/
  /**
   * Flag: whether or not email has attachments
   * @var boolean
   */
  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
   */
  public static function setDefaultTransport(Zend_Mail_Transport_Abstract $transport)
  {
    self::$_defaultTransport = $transport;
  }
  /**
   * Gets the default mail transport for all following uses of
   * unittests
   *
   * @todo Allow passing a string to indicate the transport to load
   * @todo Allow passing in optional options for the transport to load
   */
  public static function getDefaultTransport()
  {
    return self::$_defaultTransport;
  }
  /**
   * Clear the default transport property
   */
  public static function clearDefaultTransport()
  {
    self::$_defaultTransport = null;
  }
  /**
   * Public constructor
   *
   * @param string $charset
   * @return void
   */
  public function __construct($charset = null)
  {
    if ($charset != null) {
      $this->_charset = $charset;
    }
  }
  /**
   * Return charset string
   *
   * @return string
   */
  public function getCharset()
  {
    return $this->_charset;
  }
  /**
   * Set content type
   *
   * Should only be used for manually setting multipart content types.
   *
   * @param string $type Content type
   * @return Zend_Mail Implements fluent interface
   * @throws Zend_Mail_Exception for types not supported by Zend_Mime
   */
  public function setType($type)
  {
    $allowed = array(
      Zend_Mime::MULTIPART_ALTERNATIVE,
      Zend_Mime::MULTIPART_MIXED,
      Zend_Mime::MULTIPART_RELATED,
    );
    if (!in_array($type, $allowed)) {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Invalid content type "' . $type . '"');
    }
    $this->_type = $type;
    return $this;
  }
  /**
   * Get content type of the message
   *
   * @return string
   */
  public function getType()
  {
    return $this->_type;
  }
  /**
   * Set an arbitrary mime boundary for the message
   *
   * If not set, Zend_Mime will generate one.
   *
   * @param string  $boundary
   * @return Zend_Mail Provides fluent interface
   */
  public function setMimeBoundary($boundary)
  {
    $this->_mimeBoundary = $boundary;
    return $this;
  }
  /**
   * Return the boundary string used for the message
   *
   * @return string
   */
  public function getMimeBoundary()
  {
    return $this->_mimeBoundary;
  }
  /**
   * Return encoding of mail headers
   *
   * @deprecated use {@link getHeaderEncoding()} instead
   * @return string
   */
  public function getEncodingOfHeaders()
  {
    return $this->getHeaderEncoding();
  }
  /**
   * Return the encoding of mail headers
   *
   * Either Zend_Mime::ENCODING_QUOTEDPRINTABLE or Zend_Mime::ENCODING_BASE64
   *
   * @return string
   */
  public function getHeaderEncoding()
  {
    return $this->_headerEncoding;
  }
  /**
   * Set the encoding of mail headers
   *
   * @deprecated Use {@link setHeaderEncoding()} instead.
   * @param string $encoding
   * @return Zend_Mail
   */
  public function setEncodingOfHeaders($encoding)
  {
    return $this->setHeaderEncoding($encoding);
  }
  /**
   * Set the encoding of mail headers
   *
   * @param string $encoding Zend_Mime::ENCODING_QUOTEDPRINTABLE or Zend_Mime::ENCODING_BASE64
   * @return Zend_Mail Provides fluent interface
   */
  public function setHeaderEncoding($encoding)
  {
    $allowed = array(
      Zend_Mime::ENCODING_BASE64,
      Zend_Mime::ENCODING_QUOTEDPRINTABLE
    );
    if (!in_array($encoding, $allowed)) {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Invalid encoding "' . $encoding . '"');
    }
    $this->_headerEncoding = $encoding;
    return $this;
  }
  /**
   * Sets the text body for the message.
   *
   * @param string $txt
   * @param string $charset
   * @param string $encoding
   * @return Zend_Mail Provides fluent interface
  */
  public function setBodyText($txt, $charset = null, $encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE)
  {
    if ($charset === null) {
      $charset = $this->_charset;
    }
    $mp = new Zend_Mime_Part($txt);
    $mp->encoding = $encoding;
    $mp->type = Zend_Mime::TYPE_TEXT;
    $mp->disposition = Zend_Mime::DISPOSITION_INLINE;
    $mp->charset = $charset;
    $this->_bodyText = $mp;
    return $this;
  }
  /**
   * Return text body Zend_Mime_Part or string
   *
   * @param bool textOnly Whether to return just the body text content or the MIME part; defaults to false, the MIME part
   * @return false|Zend_Mime_Part|string
   */
  public function getBodyText($textOnly = false)
  {
    if ($textOnly && $this->_bodyText) {
      $body = $this->_bodyText;
      return $body->getContent();
    }
    return $this->_bodyText;
  }
  /**
   * Sets the HTML body for the message
   *
   * @param string  $html
   * @param string  $charset
   * @param string  $encoding
   * @return Zend_Mail Provides fluent interface
   */
  public function setBodyHtml($html, $charset = null, $encoding = Zend_Mime::ENCODING_QUOTEDPRINTABLE)
  {
    if ($charset === null) {
      $charset = $this->_charset;
    }
    $mp = new Zend_Mime_Part($html);
    $mp->encoding = $encoding;
    $mp->type = Zend_Mime::TYPE_HTML;
    $mp->disposition = Zend_Mime::DISPOSITION_INLINE;
    $mp->charset = $charset;
    $this->_bodyHtml = $mp;
    return $this;
  }
  /**
   * Return Zend_Mime_Part representing body HTML
   *
   * @param bool $htmlOnly Whether to return the body HTML only, or the MIME part; defaults to false, the MIME part
   * @return false|Zend_Mime_Part|string
   */
  public function getBodyHtml($htmlOnly = false)
  {
    if ($htmlOnly && $this->_bodyHtml) {
      $body = $this->_bodyHtml;
      return $body->getContent();
    }
    return $this->_bodyHtml;
  }
  /**
   * Adds an existing attachment to the mail message
   *
   * @param Zend_Mime_Part $attachment
   * @return Zend_Mail Provides fluent interface
   */
  public function addAttachment(Zend_Mime_Part $attachment)
  {
    $this->addPart($attachment);
    $this->hasAttachments = true;
    return $this;
  }
  /**
   * Creates a Zend_Mime_Part attachment
   *
   * Attachment is automatically added to the mail object after creation. The
   * attachment object is returned to allow for further manipulation.
   *
   * @param string     $body
   * @param string     $mimeType
   * @param string     $disposition
   * @param string     $encoding
   * @param string     $filename OPTIONAL A filename for the attachment
   * @return Zend_Mime_Part Newly created Zend_Mime_Part object (to allow
   * advanced settings)
   */
  public function createAttachment($body,
                   $mimeType  = Zend_Mime::TYPE_OCTETSTREAM,
                   $disposition = Zend_Mime::DISPOSITION_ATTACHMENT,
                   $encoding  = Zend_Mime::ENCODING_BASE64,
                   $filename  = null)
  {
    $mp = new Zend_Mime_Part($body);
    $mp->encoding = $encoding;
    $mp->type = $mimeType;
    $mp->disposition = $disposition;
    $mp->filename = $filename;
    $this->addAttachment($mp);
    return $mp;
  }
  /**
   * Return a count of message parts
   *
   * @return integer
   */
  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) === false) {
      if ($this->getHeaderEncoding() === Zend_Mime::ENCODING_QUOTEDPRINTABLE) {
        $value = Zend_Mime::encodeQuotedPrintableHeader($value, $this->getCharset(), Zend_Mime::LINELENGTH, Zend_Mime::LINEEND);
      } else {
        $value = Zend_Mime::encodeBase64Header($value, $this->getCharset(), Zend_Mime::LINELENGTH, Zend_Mime::LINEEND);
      }
    }
    return $value;
  }
  /**
   * 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 bool $append
   */
  protected function _storeHeader($headerName, $value, $append = false)
  {
    if (isset($this->_headers[$headerName])) {
      $this->_headers[$headerName][] = $value;
    } else {
      $this->_headers[$headerName] = array($value);
    }
    if ($append) {
      $this->_headers[$headerName]['append'] = true;
    }
  }
  /**
   * Clear header from the message
   *
   * @param string $headerName
   * @deprecated use public method directly
   */
  protected function _clearHeader($headerName)
  {
    $this->clearHeader($headerName);
  }
  /**
   * Helper function for adding a recipient and the corresponding header
   *
   * @param string $headerName
   * @param string $email
   * @param string $name
   */
  protected function _addRecipientAndHeader($headerName, $email, $name)
  {
    $email = $this->_filterEmail($email);
    $name = $this->_filterName($name);
    // prevent duplicates
    $this->_recipients[$email] = 1;
    $this->_storeHeader($headerName, $this->_formatAddress($email, $name), true);
  }
  /**
   * Adds To-header and recipient, $email can be an array, or a single string address
   *
   * @param string|array $email
   * @param string $name
   * @return Zend_Mail Provides fluent interface
   */
  public function addTo($email, $name='')
  {
    if (!is_array($email)) {
      $email = array($name => $email);
    }
    foreach ($email as $n => $recipient) {
      $this->_addRecipientAndHeader('To', $recipient, is_int($n) ? '' : $n);
      $this->_to[] = $recipient;
    }
    return $this;
  }
  /**
   * Adds Cc-header and recipient, $email can be an array, or a single string address
   *
   * @param string|array  $email
   * @param string  $name
   * @return Zend_Mail Provides fluent interface
   */
  public function addCc($email, $name='')
  {
    if (!is_array($email)) {
      $email = array($name => $email);
    }
    foreach ($email as $n => $recipient) {
      $this->_addRecipientAndHeader('Cc', $recipient, is_int($n) ? '' : $n);
    }
    return $this;
  }
  /**
   * Adds Bcc recipient, $email can be an array, or a single string address
   *
   * @param string|array  $email
   * @return Zend_Mail Provides fluent interface
   */
  public function addBcc($email)
  {
    if (!is_array($email)) {
      $email = array($email);
    }
    foreach ($email as $recipient) {
      $this->_addRecipientAndHeader('Bcc', $recipient, '');
    }
    return $this;
  }
  /**
   * Return list of recipient email addresses
   *
   * @return array (of strings)
   */
  public function getRecipients()
  {
    return array_keys($this->_recipients);
  }
  /**
   * Clear header from the message
   *
   * @param string $headerName
   * @return Zend_Mail Provides fluent inter
   */
  public function clearHeader($headerName)
  {
    if (isset($this->_headers[$headerName])){
      unset($this->_headers[$headerName]);
    }
    return $this;
  }
  /**
   * Clears list of recipient email addresses
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearRecipients()
  {
    $this->_recipients = array();
    $this->_to = array();
    $this->clearHeader('To');
    $this->clearHeader('Cc');
    $this->clearHeader('Bcc');
    return $this;
  }
  /**
   * Sets From-header and sender of the message
   *
   * @param string  $email
   * @param string  $name
   * @return Zend_Mail Provides fluent interface
   * @throws Zend_Mail_Exception if called subsequent times
   */
  public function setFrom($email, $name = null)
  {
    if (null !== $this->_from) {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('From Header set twice');
    }
    $email = $this->_filterEmail($email);
    $name = $this->_filterName($name);
    $this->_from = $email;
    $this->_storeHeader('From', $this->_formatAddress($email, $name), true);
    return $this;
  }
  /**
   * Set Reply-To Header
   *
   * @param string $email
   * @param string $name
   * @return Zend_Mail
   * @throws Zend_Mail_Exception if called more than one time
   */
  public function setReplyTo($email, $name = null)
  {
    if (null !== $this->_replyTo) {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Reply-To Header set twice');
    }
    $email = $this->_filterEmail($email);
    $name = $this->_filterName($name);
    $this->_replyTo = $email;
    $this->_storeHeader('Reply-To', $this->_formatAddress($email, $name), true);
    return $this;
  }
  /**
   * Returns the sender of the mail
   *
   * @return string
   */
  public function getFrom()
  {
    return $this->_from;
  }
  /**
   * Returns the current Reply-To address of the message
   *
   * @return string|null Reply-To address, null when not set
   */
  public function getReplyTo()
  {
    return $this->_replyTo;
  }
  /**
   * Clears the sender from the mail
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearFrom()
  {
    $this->_from = null;
    $this->clearHeader('From');
    return $this;
  }
   /**
   * Clears the current Reply-To address from the message
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearReplyTo()
  {
    $this->_replyTo = null;
    $this->clearHeader('Reply-To');
    return $this;
  }
  /**
   * Sets Default From-email and name of the message
   *
   * @param string        $email
   * @param string  Optional  $name
   * @return void
   */
  public static function setDefaultFrom($email, $name = null)
  {
    self::$_defaultFrom = array('email' => $email, 'name' => $name);
  }
  /**
   * Returns the default sender of the mail
   *
   * @return null|array  Null if none was set.
   */
  public static function getDefaultFrom()
  {
    return self::$_defaultFrom;
  }
  /**
   * Clears the default sender from the mail
   *
   * @return void
   */
  public static function clearDefaultFrom()
  {
    self::$_defaultFrom = null;
  }
  /**
   * Sets From-name and -email based on the defaults
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function setFromToDefaultFrom() {
    $from = self::getDefaultFrom();
    if($from === null) {
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception(
        'No default From Address set to use');
    }
    $this->setFrom($from['email'], $from['name']);
    return $this;
  }
  /**
   * Sets Default ReplyTo-address and -name of the message
   *
   * @param string        $email
   * @param string  Optional  $name
   * @return void
   */
  public static function setDefaultReplyTo($email, $name = null)
  {
    self::$_defaultReplyTo = array('email' => $email, 'name' => $name);
  }
  /**
   * Returns the default Reply-To Address and Name of the mail
   *
   * @return null|array  Null if none was set.
   */
  public static function getDefaultReplyTo()
  {
    return self::$_defaultReplyTo;
  }
  /**
   * Clears the default ReplyTo-address and -name from the mail
   *
   * @return void
   */
  public static function clearDefaultReplyTo()
  {
    self::$_defaultReplyTo = null;
  }
  /**
   * Sets ReplyTo-name and -email based on the defaults
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function setReplyToFromDefault() {
    $replyTo = self::getDefaultReplyTo();
    if($replyTo === null) {
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception(
        'No default Reply-To Address set to use');
    }
    $this->setReplyTo($replyTo['email'], $replyTo['name']);
    return $this;
  }
  /**
   * Sets the Return-Path header of the message
   *
   * @param string  $email
   * @return Zend_Mail Provides fluent interface
   * @throws Zend_Mail_Exception if set multiple times
   */
  public function setReturnPath($email)
  {
    if ($this->_returnPath === null) {
      $email = $this->_filterEmail($email);
      $this->_returnPath = $email;
      $this->_storeHeader('Return-Path', $email, false);
    } else {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Return-Path Header set twice');
    }
    return $this;
  }
  /**
   * Returns the current Return-Path address of the message
   *
   * If no Return-Path header is set, returns the value of {@link $_from}.
   *
   * @return string
   */
  public function getReturnPath()
  {
    if (null !== $this->_returnPath) {
      return $this->_returnPath;
    }
    return $this->_from;
  }
  /**
   * Clears the current Return-Path address from the message
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearReturnPath()
  {
    $this->_returnPath = null;
    $this->clearHeader('Return-Path');
    return $this;
  }
  /**
   * Sets the subject of the message
   *
   * @param  string  $subject
   * @return Zend_Mail Provides fluent interface
   * @throws Zend_Mail_Exception
   */
  public function setSubject($subject)
  {
    if ($this->_subject === null) {
      $subject = $this->_filterOther($subject);
      $this->_subject = $this->_encodeHeader($subject);
      $this->_storeHeader('Subject', $this->_subject);
    } else {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Subject set twice');
    }
    return $this;
  }
  /**
   * Returns the encoded subject of the message
   *
   * @return string
   */
  public function getSubject()
  {
    return $this->_subject;
  }
  /**
   * Clears the encoded subject from the message
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearSubject()
  {
    $this->_subject = null;
    $this->clearHeader('Subject');
    return $this;
  }
  /**
   * Sets Date-header
   *
   * @param timestamp|string|Zend_Date $date
   * @return Zend_Mail Provides fluent interface
   * @throws Zend_Mail_Exception if called subsequent times or wrong date format.
   */
  public function setDate($date = null)
  {
    if ($this->_date === null) {
      if ($date === null) {
        $date = date('r');
      } else if (is_int($date)) {
        $date = date('r', $date);
      } else if (is_string($date)) {
        $date = strtotime($date);
        if ($date === false || $date < 0) {
          /**
           * @see Zend_Mail_Exception
           */
          require_once 'Zend/Mail/Exception.php';
          throw new Zend_Mail_Exception('String representations of Date Header must be ' .
                         'strtotime()-compatible');
        }
        $date = date('r', $date);
      } else if ($date instanceof Zend_Date) {
        $date = $date->get(Zend_Date::RFC_2822);
      } else {
        /**
         * @see Zend_Mail_Exception
         */
        require_once 'Zend/Mail/Exception.php';
        throw new Zend_Mail_Exception(__METHOD__ . ' only accepts UNIX timestamps, Zend_Date objects, ' .
                       ' and strtotime()-compatible strings');
      }
      $this->_date = $date;
      $this->_storeHeader('Date', $date);
    } else {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Date Header set twice');
    }
    return $this;
  }
  /**
   * Returns the formatted date of the message
   *
   * @return string
   */
  public function getDate()
  {
    return $this->_date;
  }
  /**
   * Clears the formatted date from the message
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearDate()
  {
    $this->_date = null;
    $this->clearHeader('Date');
    return $this;
  }
  /**
   * Sets the Message-ID of the message
   *
   * @param  boolean|string $id
   * true :Auto
   * false :No set
   * null :No set
   * string:Sets given string (Angle brackets is not necessary)
   * @return Zend_Mail Provides fluent interface
   * @throws Zend_Mail_Exception
   */
  public function setMessageId($id = true)
  {
    if ($id === null || $id === false) {
      return $this;
    } elseif ($id === true) {
      $id = $this->createMessageId();
    }
    if ($this->_messageId === null) {
      $id = $this->_filterOther($id);
      $this->_messageId = $id;
      $this->_storeHeader('Message-Id', '<' . $this->_messageId . '>');
    } else {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Message-ID set twice');
    }
    return $this;
  }
  /**
   * Returns the Message-ID of the message
   *
   * @return string
   */
  public function getMessageId()
  {
    return $this->_messageId;
  }
  /**
   * Clears the Message-ID from the message
   *
   * @return Zend_Mail Provides fluent interface
   */
  public function clearMessageId()
  {
    $this->_messageId = null;
    $this->clearHeader('Message-Id');
    return $this;
  }
  /**
   * Creates the Message-ID
   *
   * @return string
   */
  public function createMessageId() {
    $time = time();
    if ($this->_from !== null) {
      $user = $this->_from;
    } elseif (isset($_SERVER['REMOTE_ADDR'])) {
      $user = $_SERVER['REMOTE_ADDR'];
    } else {
      $user = getmypid();
    }
    $rand = mt_rand();
    if ($this->_recipients !== array()) {
      $recipient = array_rand($this->_recipients);
    } else {
      $recipient = 'unknown';
    }
    if (isset($_SERVER["SERVER_NAME"])) {
      $hostName = $_SERVER["SERVER_NAME"];
    } else {
      $hostName = php_uname('n');
    }
    return sha1($time . $user . $rand . $recipient) . '@' . $hostName;
  }
  /**
   * Add a custom header to the message
   *
   * @param string       $name
   * @param string       $value
   * @param boolean       $append
   * @return Zend_Mail      Provides fluent interface
   * @throws Zend_Mail_Exception on attempts to create standard headers
   */
  public function addHeader($name, $value, $append = false)
  {
    $prohibit = array('to', 'cc', 'bcc', 'from', 'subject',
             'reply-to', 'return-path',
             'date', 'message-id',
             );
    if (in_array(strtolower($name), $prohibit)) {
      /**
       * @see Zend_Mail_Exception
       */
      require_once 'Zend/Mail/Exception.php';
      throw new Zend_Mail_Exception('Cannot set standard header from addHeader()');
    }
    $value = $this->_filterOther($value);
    $value = $this->_encodeHeader($value);
    $this->_storeHeader($name, $value, $append);
    return $this;
  }
  /**
   * Return mail headers
   *
   * @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 Zend_Mail          Provides fluent interface
   */
  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;
      }
    }
    if ($this->_date === null) {
      $this->setDate();
    }
    if(null === $this->_from && null !== self::getDefaultFrom()) {
      $this->setFromToDefaultFrom();
    }
    if(null === $this->_replyTo && null !== self::getDefaultReplyTo()) {
      $this->setReplyToFromDefault();
    }
    $transport->send($this);
    return $this;
  }
  /**
   * Filter of email data
   *
   * @param string $email
   * @return string
   */
  protected function _filterEmail($email)
  {
    $rule = array("\r" => '',
           "\n" => '',
           "\t" => '',
           '"' => '',
           ',' => '',
           '<' => '',
           '>' => '',
    );
    return strtr($email, $rule);
  }
  /**
   * Filter of name data
   *
   * @param string $name
   * @return string
   */
  protected function _filterName($name)
  {
    $rule = array("\r" => '',
           "\n" => '',
           "\t" => '',
           '"' => "'",
           '<' => '[',
           '>' => ']',
    );
    return trim(strtr($name, $rule));
  }
  /**
   * Filter of other data
   *
   * @param string $data
   * @return string
   */
  protected function _filterOther($data)
  {
    $rule = array("\r" => '',
           "\n" => '',
           "\t" => '',
    );
    return strtr($data, $rule);
  }
  /**
   * Formats e-mail address
   *
   * @param string $email
   * @param string $name
   * @return string
   */
  protected function _formatAddress($email, $name)
  {
    if ($name === '' || $name === null || $name === $email) {
      return $email;
    } else {
      $encodedName = $this->_encodeHeader($name);
      if ($encodedName === $name && strcspn($name, '()<>[]:;@\\,') != strlen($name)) {
        $format = '"%s" <%s>';
      } else {
        $format = '%s <%s>';
      }
      return sprintf($format, $encodedName, $email);
    }
  }
}

希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中static关键字原理的学习研究分析
Jul 18 PHP
php设计模式小结
Feb 15 PHP
xss防御之php利用httponly防xss攻击
Mar 21 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 PHP
php微信开发之关注事件
Jun 14 PHP
PHP时间处理类操作示例
Sep 05 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 #PHP
zend框架实现支持sql server的操作方法
Dec 08 #PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 #PHP
thinkPHP模板引擎用法示例
Dec 08 #PHP
thinkPHP中session()方法用法详解
Dec 08 #PHP
thinkPHP引入类的方法详解
Dec 08 #PHP
PHP对象、模式与实践之高级特性分析
Dec 08 #PHP
You might like
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php自动载入类用法实例分析
2016/06/24 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
自己的js工具 Event封装
2009/08/21 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
机电一体化专业推荐信
2013/12/03 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
工厂标语大全
2014/10/06 职场文书
教师年度个人总结
2015/02/11 职场文书
护林员个人总结
2015/03/04 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
中学图书馆工作总结
2015/08/11 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript