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面向对象编程快速入门
Dec 14 PHP
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
php微信开发之音乐回复功能
Jun 14 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缓存技术的多种方法小结
2012/08/14 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
php中文乱码问题的终极解决方案汇总
2017/08/01 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
python读写ini文件示例(python读写文件)
2014/03/25 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
详解Python编程中time模块的使用
2015/11/20 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
2013年研究生毕业感言
2014/02/06 职场文书
军训自我鉴定范文
2014/02/13 职场文书
市场部经理岗位职责
2014/04/10 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
小孩不笨观后感
2015/06/03 职场文书
纪检监察立案决定书
2015/06/24 职场文书
银行服务理念口号
2015/12/25 职场文书