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 &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; 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);}}}

 

转载于:https://www.cnblogs.com/jiqing9006/archive/2013/04/18/3027966.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XenDesktop 5 SQL Server Mirror事务日志比较大的原因分析

在实施XenDesktop5项目过程中&#xff0c;发现XenDesktop5版本的数据库镜像事务日志很大&#xff0c;在XenDesktop4和XenApp版本中不存在该问题&#xff1b;于是我根据该现象探究XenDesktop5及以上版本镜像数据库事务日志为何如此之大以及我们今后实施的过程中该如何来维护这么…

nanotime java 博客园_System.nanoTime (计时工具类)

转自&#xff1a;http://blog.csdn.net/yuansuruanjian/article/details/8562890JDK1.5之后java中的计时给出了更精确的方法&#xff1a;System.nanoTime()&#xff0c;输出的精度是纳秒级别&#xff0c;这个给一些性能测试提供了更准确的参考。但是这个方法有个需要注意的地方…

input子系统详解1——input子系统简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 转载博客&#xff1a;input输入子系统 - 涛少& - 博客园​​​​​​​ 前言 Linux系统支持的输入设备繁多&#xff0c;例如键盘、鼠标、触摸屏、手柄等等&#xff0c;Linux系统是如何管理如此…

ie compatibility

http://www.red-team-design.com/how-to-solve-common-ie-bugs转载于:https://www.cnblogs.com/daishuguang/archive/2013/04/20/3031900.html

【04】Effective Java - 类和接口

为什么80%的码农都做不了架构师&#xff1f;>>> 1、使类和成员的可访问性最小化 封装是软件设计的基本原则之一&#xff0c;它的好处就是解除组成系统的各个模块之间的耦合关系&#xff0c;使得这些模块可以独立地开发、测试、优化、使用、理解 修改&#xff0c;同…

java 圆的交点_java – 获取线条和形状的交点

理念您可以使用getPathIterator()方法将GenenralPath解构为其段(移动到,行到,四到,立方到,关闭).现在,您可以搜索每个线段与线的交叉点.public static Point[] getIntersections(Path path, Line line) {List intersections new ArrayList();PathIterator it path.getPathIte…

OpenGL运用辅佐库创立规矩几许目标

辅佐类分类&#xff1a; 1&#xff09;窗口初始化函数 2&#xff09;窗口处置和工作处置函数 3&#xff09;定义场景制造循环函数 4&#xff09;三围物体制造函数 5&#xff09;颜色索引表装入函数 6&#xff09;空闲工作处置函数 下面描写了一个程序&#xff0c;该程序尽可以包…

input子系统详解2——应用层代码实践

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、编程步骤总结 步骤1&#xff1a;确定设备文件名字 步骤2&#xff1a;使用标准接口打开与读取设备文件 步骤3&#xff1a;解析struct input_event 二、编程步骤分析 1、确定设备文件名 应用层操作…

构造函数初始化器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 {class Program{static void Main(string[] args){cat c new cat("萌萌");//先执行cat(string s,int i)构造…

oracle中的视图详解

1.视图的概述 视图其实就是一条查询sql语句&#xff0c;用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用&#xff0c;因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表&#xff0c;所有对视图数据的修改最终都会被反映到视图的基…

input子系统详解3——input子系统框架核心层分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 一、前言 由input子系统简介可知&#xff0c;input子系统分为三层&#xff1a; 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件&#xff0c;分别对应…

java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中

把spring-boot项目按照平常的web项目一样发布到tomcat容器下一、修改打包形式在pom.xml里设置 war二、移除嵌入式tomcat插件在pom.xml里找到spring-boot-starter-web依赖节点&#xff0c;在其中添加如下代码&#xff0c;org.springframework.bootspring-boot-starter-weborg.sp…

Gitlab Merge Request Builder Plugin 配置小记

2019独角兽企业重金招聘Python工程师标准>>> 以前在给一些开源项目贡献代码的时候&#xff0c;在github上一提交pull request或者提交的分支代码更新了的时候&#xff0c;jenkins就会自动把代码进行merge并且运行单元测试&#xff0c;当时看了心里就2个字&#xff1…

IOS:屏幕旋转与Transform

IOS&#xff1a;屏幕旋转与Transform iTouch&#xff0c;iPhone&#xff0c;iPad设置都是支持旋转的&#xff0c;如果我们的程序能够根据不同的方向做出不同的布局&#xff0c;体验会更好。 如何设置程序支持旋转呢&#xff0c;通常我们会在程序的info.plist中进行设置Supporte…

input子系统详解4——输入事件驱动层源码分析

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 由input子系统简介可知&#xff0c;input子系统分为三层&#xff1a; ​ 1、上层输入事件驱动层 涉及的文件有x210_kernel\drivers\input\evdev.c、mousedev.c 和 joydev.c文件&#xff0…

前端翻译:Activating Browser Modes with Doctype

一、前言                         原本备份&#xff1a; http://www.cnblogs.com/fsjohnhuang/p/3830623.html 由于本人英语能力有限&#xff0c;译本内容难免有误&#xff0c;望各位指正&#xff01; 本译文不含附录部分&#xff0c;请知悉。 二、译…

java公钥加密私钥解密过程_GPG加密解密过程

GPG加密解密过程一、Linux系统下1.安装yum安装[rootPOC-ORACLE ~]# yum install gnupg下载安装包安装https://www.gnupg.org/download/index.en.html查看gpg帮助[rootPOC-ORACLE ~]# gpg --helpgpg (GnuPG) 2.0.14libgcrypt 1.4.5Copyright (C) 2009 Free Software Foundation,…

魔兽世界客户端数据研究(三)

终于决定&#xff0c;还是通过wow model viewer起手&#xff0c;研究一下WOW的数据类型&#xff0c;从另一个角度&#xff0c;体验一把这个唯一让我充过值的游戏。 这将是一系列随笔&#xff0c;即在读代码的时候&#xff0c;顺便记录&#xff0c;以理清思路和加深映象。 其中…

input子系统详解5——参考驱动模板编写按键驱动

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、input类设备驱动的开发 &#xff08;1&#xff09;输入事件驱动层和框架核心层不需要动&#xff0c;只需要编写具体硬件驱动层代码。 &#xff08;2&#xff09;具体硬件驱动层的编程接口与调用…

java很多魔法数判断_可别在代码中写那么多魔法值了,脑壳疼!

1. 前言重构老代码中遇到了不少类似下面这种写法&#xff1a;public void attend(String value) {if ("0".equals(value)) {//todo} else if ("1".equals(value)) {//todo} else {//todo}}脑壳疼&#xff01;从 Java 语法上无懈可击&#xff0c;但是从业务…