首页 > 代码库 > qser-mailer: swiftmailer 的快捷助手

qser-mailer: swiftmailer 的快捷助手

如果本文图片显示不出来,请看我的博客 http://vb2005xu.iteye.com/blog/2114518


近日在对charsen的修改版上进行了再次的修改与调整,对原版的qee v3 做了更多的bug修改,目前经过测试基本可以使用,虽然还有一些坑,但是代码量始终只有那么一点,填补起来应该很方便,加上qee-v3确实有些技术知识点可供学习..

因 为 qee-v3 只给出了一些极简单的库支持,而邮件功能在项目开发过程中又是不可或缺的部分,所以就集成了swiftmailer, 这个库在国外的知名度蛮高的,在性能上比phpmailer要好不少,尤其是对大附件的支持上.唯独的缺陷就是中文文档太少,为了方便使用,故对其做了如 下封装....

如果非要对这个封装代码起个名字,那就叫做 qser-mailer 吧

先给出一个如何使用的demo,个人感觉还是比较方便和简单的

Php代码   收藏代码
  1. <?php  
  2.   
  3. namespace qser\app\actions;  
  4.   
  5. use qeephp\mvc\BaseAction;  
  6. use qeephp\Config;  
  7.   
  8. use qeephp\tools\Logger;  
  9. use qeephp\storage\mysql\DataSource;  
  10. use qeephp\storage\Meta;  
  11.   
  12. use qser\app\models\Post;  
  13. use qser\libraries\Validator;  
  14. use qser\libraries\PinyinLib;  
  15.   
  16. class IndexAction extends BaseAction  
  17. {  
  18.   
  19.     /** 
  20.      * @var mysql\DataSource 
  21.      */  
  22.     private $_ds;  
  23.     private $_handle;  
  24.   
  25.     function execute()  
  26.     {  
  27.         try{  
  28.             $post5 = Post::find_one(5);      
  29.         }  
  30.         catch( \Exception $ex )  
  31.         {  
  32.             Logger::instance(‘test‘)->fatal($ex);  
  33.         }  
  34.         Logger::instance(‘test‘)->debug($post5);  
  35.   
  36.         dump(‘indexAction‘,PinyinLib::topinyin("我爱北京天门"));  
  37.         ///dump($this->app);  
  38.   
  39.         // $value = 7;  
  40.         // $result = Validator::validateBatch($value, array(array(‘is_int‘),array(‘between‘, 2, 6)));  
  41.         // var_dump($result);  
  42.   
  43.         $this->view(array(‘action‘ => ‘a‘, __DIR__));  
  44.           
  45.         <span style="color: #ff6600;"><strong>$email = array(‘vb@qq.com‘);  
  46.         $content = $this->result;  
  47.         $this->app->tool(‘mail‘)->mailer->send(function($messageuse($email,$content)  
  48.             {  
  49.                 $text = $content->execute();  
  50.                 $message->to($email)->subject(‘qeev3 测试邮件‘);  
  51.                 $message->setBody($text, 0 ? ‘text/plain‘ : ‘text/html‘);  
  52.                 $message->attachData($text,‘runtest‘,array(‘as‘ => $message->encodeAttachmentName(‘啥都好说‘)));  
  53.                 $message->attach(MYAPP_SRC_PATH . ‘/tmp/tests.log‘,array(‘as‘ => $message->encodeAttachmentName(‘尼玛‘)));  
  54.             });  
  55.         </strong></span>  
  56. //      dump($this->app->tool(‘mail‘)->mailer , $email);  
  57. //        
  58.         //dump( $post5 );  
  59.   
  60.         /* 
  61. $sql = ‘show tables‘; 
  62.          $result = $this->_ds->execute($sql); 
  63.          dump($result,$sql); // out resource 
  64.  
  65.          $result = $this->_ds->find_one(‘post‘,null); 
  66.          dump($result,‘post_one‘); 
  67.  
  68.          $result = $this->_ds->find(‘post‘,null)->fetch(); 
  69.          dump($result,‘fetch‘); 
  70.  
  71.          $result = $this->_ds->find(‘post‘,null)->sort(‘post_id DESC‘)->fetch(); 
  72.          dump($result,‘fetch by sort‘); 
  73. */  
  74.   
  75.          //$result = $this->_ds->find(‘post‘,null)->fetch_all();  
  76.         // dump($result,‘fetch_all‘);  
  77.         //  
  78.         //$meta = new Meta(‘qser\\app\\models\\Revision‘);  
  79.   
  80.         //$meta = array();  
  81.        // dump( $meta ,‘meta‘);  
  82.   
  83.     }  
  84.   
  85.     protected function __before_execute()  
  86.     {  
  87.         // init resource  
  88.          // $this->_ds = new DataSource( Config::get(‘storage.domains.default‘) );  
  89.          // $this->_ds->connect();  
  90.          // $this->_ds->set_logger(Logger::instance(‘test‘));  
  91.          // $this->_handle = $this->_ds->handle();  
  92.   
  93.          // $this->_ds->execute(‘SET AUTOCOMMIT=0‘);  
  94.          // $this->_ds->execute(‘START TRANSACTION‘);  
  95.   
  96.          // foreach (self::post_recordset() as $post)  
  97.          // {  
  98.          //     $this->_ds->insert(‘qser_posts‘, $post);  
  99.          // }  
  100.   
  101.          // $this->_ds->execute(‘COMMIT‘);  
  102.          // $this->_ds->execute(‘SET AUTOCOMMIT=1‘);  
  103.   
  104.   
  105.         return true;  
  106.     }  
  107.   
  108.     // test func  
  109.   
  110.     static function post_recordset($begin_post_id = 31)  
  111.     {  
  112.         static $authors = array(‘dualface‘‘liaoyulei‘‘lownr‘‘dox‘‘quietlife‘);  
  113.   
  114.         $recordset = array();  
  115.         for ($post_id = $begin_post_id$post_id < $begin_post_id + 10; $post_id++)  
  116.         {  
  117.             $author = $authors[mt_rand(0, count($authors) - 1)];  
  118.             $recordset[$post_id] = array(  
  119.                 ‘post_id‘ => $post_id,  
  120.                 ‘title‘ => ‘post ‘ . $post_id,  
  121.                 ‘author‘ => $author,  
  122.                 ‘click_count‘ => mt_rand(1, 999),  
  123.             );  
  124.         }  
  125.         return $recordset;  
  126.     }  
  127.   
  128.     static function revisions_recordset($begin_post_id = 1)  
  129.     {  
  130.         $recordset = array();  
  131.         $created = time();  
  132.         for ($post_id = $begin_post_id$post_id < $begin_post_id + 5; $post_id++)  
  133.         {  
  134.             $num_rev = mt_rand(1, 5);  
  135.             for ($i = 0; $i < $num_rev$i++)  
  136.             {  
  137.                 $recordset[] = array(  
  138.                     ‘post_id‘ => $post_id,  
  139.                     ‘body‘    => sprintf(‘post %u rev %u‘$post_id$i),  
  140.                     ‘created‘ => $created,  
  141.                 );  
  142.             }  
  143.         }  
  144.         return $recordset;  
  145.     }  
  146. }  

 

测试的结果蛮好,如图所示,中文附件名字也能正常显示,灰常给力是不是


------------------------------------------------------------
所有代码如下所示:

Php代码   收藏代码
  1. <?php namespace qser\app\tools;  
  2.   
  3. use qeephp\mvc\App;  
  4. use qser\libraries\Mail\Mailer;  
  5.   
  6. class MailTool  
  7. {  
  8.     /** 
  9.      * 当前请求 
  10.      * 
  11.      * @var Mailer 
  12.      */  
  13.     public $mailer;  
  14.       
  15.     /** 
  16.      * Create a new Mailer instance. 
  17.      * 
  18.      * @param App $app 
  19.      * @param array $config 
  20.      */  
  21.     public function __construct(App $apparray $config) {  
  22.         $this->mailer = new Mailer($config);  
  23.     }  
  24.   
  25. }  

 

Php代码   收藏代码
  1. <?php   
  2.   
  3. namespace qser\libraries\Mail;  
  4.   
  5. if (!defined(‘SWIFT_INIT_LOADED‘)) {  
  6.     require ROOT_PATH . ‘/packages/swiftmailer/lib/swift_init.php‘;  
  7. }  
  8.   
  9. use Swift_Mailer;  
  10. use Swift_Message;  
  11. use qeephp\tools\Logger;  
  12. use qser\libraries\Mail\Provider;  
  13.   
  14. class Mailer   
  15. {  
  16.   
  17.     /** 
  18.      * The Swift Mailer instance. 
  19.      * 
  20.      * @var \Swift_Mailer 
  21.      */  
  22.     protected $swift;  
  23.   
  24.     /** 
  25.      * The global from address and name. 
  26.      * 
  27.      * @var array 
  28.      */  
  29.     protected $from;  
  30.   
  31.     /** 
  32.      * The log writer instance. 
  33.      * 
  34.      * @var ILogger 
  35.      */  
  36.     protected $logger;  
  37.   
  38.     /** 
  39.      * Indicates if the actual sending is disabled. 
  40.      * 
  41.      * @var bool 
  42.      */  
  43.     protected $pretending = false;  
  44.   
  45.     /** 
  46.      * Array of failed recipients. 
  47.      * 
  48.      * @var array 
  49.      */  
  50.     protected $failedRecipients = array();  
  51.   
  52.     /** 
  53.      * Create a new Mailer instance. 
  54.      * 
  55.      * @param  array  $config 
  56.      * @return void 
  57.      */  
  58.     public function __construct(array  $config)  
  59.     {     
  60.         $this->swift = Provider::registerSwiftMailer($config);  
  61.           
  62.         $logger = val($config‘logger‘ , false);  
  63.         if ($logger)  
  64.         {  
  65.             $this->setLogger(Logger::instance($logger));  
  66.         }  
  67.           
  68.         $from = val($config‘from‘ , false);  
  69.   
  70.         if (is_array($from) && isset($from[‘address‘]))  
  71.         {  
  72.             $this->alwaysFrom($from[‘address‘], $from[‘name‘]);  
  73.         }  
  74.   
  75.         // Here we will determine if the mailer should be in "pretend" mode for this  
  76.         // environment, which will simply write out e-mail to the logs instead of  
  77.         // sending it over the web, which is useful for local dev environments.  
  78.         $pretend = val($config‘pretend‘ , false);  
  79.   
  80.         $this->pretend($pretend);  
  81.     }  
  82.   
  83.     /** 
  84.      * Set the global from address and name. 
  85.      * 
  86.      * @param  string  $address 
  87.      * @param  string  $name 
  88.      * @return void 
  89.      */  
  90.     public function alwaysFrom($address$name = null)  
  91.     {  
  92.         $this->from = compact(‘address‘‘name‘);  
  93.     }  
  94.   
  95.     /** 
  96.      * Send a new message. 
  97.      * 
  98.      * @param  callback  $callback 
  99.      * @return int 
  100.      */  
  101.     public function send($callback)  
  102.     {  
  103.         $message = $this->createMessage();  
  104.         $data[‘message‘] = $message;  
  105.           
  106.         if ($callback && is_callable($callback))  
  107.         {  
  108.             call_user_func($callback,$message);  
  109.         }  
  110.         else  
  111.         {  
  112.             throw new \InvalidArgumentException(‘Invalid mail send callback.‘);  
  113.         }  
  114.           
  115.         $message = $message->getSwiftMessage();  
  116.   
  117.         return $this->sendSwiftMessage($message);  
  118.     }  
  119.   
  120.     /** 
  121.      * Send a Swift Message instance. 
  122.      * 
  123.      * @param  \Swift_Message  $message 
  124.      * @return int 
  125.      */  
  126.     protected function sendSwiftMessage($message)  
  127.     {  
  128.         if ( !$this->pretending)  
  129.         {  
  130.             return $this->swift->send($message$this->failedRecipients);  
  131.         }  
  132.         elseif (isset($this->logger))  
  133.         {  
  134.             $this->logMessage($message);  
  135.   
  136.             return 1;  
  137.         }  
  138.     }  
  139.   
  140.     /** 
  141.      * Log that a message was sent. 
  142.      * 
  143.      * @param  \Swift_Message  $message 
  144.      * @return void 
  145.      */  
  146.     protected function logMessage($message)  
  147.     {  
  148.         $emails = implode(‘, ‘array_keys((array$message->getTo()));  
  149.   
  150.         $this->logger->info("Pretending to mail message to: {$emails}");  
  151.     }  
  152.   
  153.     /** 
  154.      * Create a new message instance. 
  155.      * 
  156.      * @return Message 
  157.      */  
  158.     protected function createMessage()  
  159.     {  
  160.         $message = new Message(new Swift_Message);  
  161.   
  162.         // If a global from address has been specified we will set it on every message  
  163.         // instances so the developer does not have to repeat themselves every time  
  164.         // they create a new message. We will just go ahead and push the address.  
  165.         if (isset($this->from[‘address‘]))  
  166.         {  
  167.             $message->from($this->from[‘address‘], $this->from[‘name‘]);  
  168.         }  
  169.   
  170.         return $message;  
  171.     }  
  172.   
  173.     /** 
  174.      * Tell the mailer to not really send messages. 
  175.      * 
  176.      * @param  bool  $value 
  177.      * @return void 
  178.      */  
  179.     public function pretend($value = true)  
  180.     {  
  181.         $this->pretending = $value;  
  182.     }  
  183.   
  184.     /** 
  185.      * Get the Swift Mailer instance. 
  186.      * 
  187.      * @return \Swift_Mailer 
  188.      */  
  189.     public function getSwiftMailer()  
  190.     {  
  191.         return $this->swift;  
  192.     }  
  193.   
  194.     /** 
  195.      * Get the array of failed recipients. 
  196.      * 
  197.      * @return array 
  198.      */  
  199.     public function failures()  
  200.     {  
  201.         return $this->failedRecipients;  
  202.     }  
  203.   
  204.     /** 
  205.      * Set the log writer instance. 
  206.      * 
  207.      * @param  Logger  $logger 
  208.      */  
  209.     public function setLogger(Logger $logger)  
  210.     {  
  211.         $this->logger = $logger;  
  212.     }  
  213.   
  214. }  

 

Php代码   收藏代码
  1. <?php namespace qser\libraries\Mail;  
  2.   
  3. use Swift_Mailer;  
  4. use Swift_SmtpTransport as SmtpTransport;  
  5. use Swift_MailTransport as MailTransport;  
  6. use Swift_SendmailTransport as SendmailTransport;  
  7.   
  8. class Provider  
  9. {  
  10.       
  11.     /** 
  12.      * Register the Swift Mailer instance. 
  13.      * 
  14.      * @return \Swift_Mailer 
  15.      */  
  16.     public static function registerSwiftMailer($config)  
  17.     {  
  18.         $self = new static();  
  19.         return new Swift_Mailer( $self->registerSwiftTransport($config) );  
  20.     }  
  21.   
  22.     /** 
  23.      * Register the Swift Transport instance. 
  24.      * 
  25.      * @param  array  $config 
  26.      * @return void 
  27.      * 
  28.      * @throws \InvalidArgumentException 
  29.      */  
  30.     protected function registerSwiftTransport($config)  
  31.     {  
  32.         switch ($config[‘driver‘])  
  33.         {  
  34.             case ‘smtp‘:  
  35.                 return $this->registerSmtpTransport($config);  
  36.   
  37.             case ‘sendmail‘:  
  38.                 return $this->registerSendmailTransport($config);  
  39.   
  40.             case ‘mail‘:  
  41.                 return $this->registerMailTransport($config);  
  42.   
  43.             default:  
  44.                 throw new \InvalidArgumentException(‘Invalid mail driver.‘);  
  45.         }  
  46.     }  
  47.   
  48.     /** 
  49.      * Register the SMTP Swift Transport instance. 
  50.      * 
  51.      * @param  array  $config 
  52.      * @return void 
  53.      */  
  54.     protected function registerSmtpTransport($config)  
  55.     {  
  56.         // The Swift SMTP transport instance will allow us to use any SMTP backend  
  57.         // for delivering mail such as Sendgrid, Amazon SMS, or a custom server  
  58.         // a developer has available. We will just pass this configured host.  
  59.         $transport = SmtpTransport::newInstance($config[‘host‘], $config[‘port‘]);  
  60.   
  61.         if (!emptyempty($config[‘encryption‘]))  
  62.         {  
  63.             $transport->setEncryption($config[‘encryption‘]);  
  64.         }  
  65.   
  66.         // Once we have the transport we will check for the presence of a username  
  67.         // and password. If we have it we will set the credentials on the Swift  
  68.         // transporter instance so that we‘ll properly authenticate delivery.  
  69.         if (!emptyempty($config[‘username‘]))  
  70.         {  
  71.             $transport->setUsername($config[‘username‘]);  
  72.             $transport->setPassword($config[‘password‘]);  
  73.         }  
  74.   
  75.         return $transport;  
  76.     }  
  77.   
  78.     /** 
  79.      * Register the Sendmail Swift Transport instance. 
  80.      * 
  81.      * @param  array  $config 
  82.      * @return void 
  83.      */  
  84.     protected function registerSendmailTransport($config)  
  85.     {  
  86.         return SendmailTransport::newInstance($config[‘sendmail‘]);  
  87.     }  
  88.   
  89.     /** 
  90.      * Register the Mail Swift Transport instance. 
  91.      * 
  92.      * @param  array  $config 
  93.      * @return void 
  94.      */  
  95.     protected function registerMailTransport($config)  
  96.     {  
  97.         return MailTransport::newInstance();  
  98.     }  
  99.   
  100.     /** 
  101.      * Get the services provided by the provider. 
  102.      * 
  103.      * @return array 
  104.      */  
  105.     public function provides()  
  106.     {  
  107.         return array(‘mailer‘‘swift.mailer‘‘swift.transport‘);  
  108.     }  
  109.   
  110. }  

 

Php代码   收藏代码
  1. <?php namespace qser\libraries\Mail;  
  2.   
  3. use Swift_Image;  
  4. use Swift_Attachment;  
  5.   
  6. class Message {  
  7.   
  8.     /** 
  9.      * The Swift Message instance. 
  10.      * 
  11.      * @var \Swift_Message 
  12.      */  
  13.     protected $swift;  
  14.   
  15.     /** 
  16.      * Create a new message instance. 
  17.      * 
  18.      * @param  \Swift_Message  $swift 
  19.      * @return void 
  20.      */  
  21.     public function __construct($swift)  
  22.     {  
  23.         $this->swift = $swift;  
  24.     }  
  25.   
  26.     /** 
  27.      * Add a "from" address to the message. 
  28.      * 
  29.      * @param  string  $address 
  30.      * @param  string  $name 
  31.      * @return \qser\libraries\Mail\Message 
  32.      */  
  33.     public function from($address$name = null)  
  34.     {  
  35.         $this->swift->setFrom($address$name);  
  36.   
  37.         return $this;  
  38.     }  
  39.   
  40.     /** 
  41.      * Set the "sender" of the message. 
  42.      * 
  43.      * @param  string  $address 
  44.      * @param  string  $name 
  45.      * @return \qser\libraries\Mail\Message 
  46.      */  
  47.     public function sender($address$name = null)  
  48.     {  
  49.         $this->swift->setSender($address$name);  
  50.   
  51.         return $this;  
  52.     }  
  53.   
  54.     /** 
  55.      * Set the "return path" of the message. 
  56.      * 
  57.      * @param  string  $address 
  58.      * @return \qser\libraries\Mail\Message 
  59.      */  
  60.     public function returnPath($address)  
  61.     {  
  62.         $this->swift->setReturnPath($address);  
  63.   
  64.         return $this;  
  65.     }  
  66.   
  67.     /** 
  68.      * Add a recipient to the message. 
  69.      * 
  70.      * @param  string|array  $address 
  71.      * @param  string  $name 
  72.      * @return \qser\libraries\Mail\Message 
  73.      */  
  74.     public function to($address$name = null)  
  75.     {  
  76.         return $this->addAddresses($address$name‘To‘);  
  77.     }  
  78.   
  79.     /** 
  80.      * Add a carbon copy to the message. 
  81.      * 
  82.      * @param  string  $address 
  83.      * @param  string  $name 
  84.      * @return \qser\libraries\Mail\Message 
  85.      */  
  86.     public function cc($address$name = null)  
  87.     {  
  88.         return $this->addAddresses($address$name‘Cc‘);  
  89.     }  
  90.   
  91.     /** 
  92.      * Add a blind carbon copy to the message. 
  93.      * 
  94.      * @param  string  $address 
  95.      * @param  string  $name 
  96.      * @return \qser\libraries\Mail\Message 
  97.      */  
  98.     public function bcc($address$name = null)  
  99.     {  
  100.         return $this->addAddresses($address$name‘Bcc‘);  
  101.     }  
  102.   
  103.     /** 
  104.      * Add a reply to address to the message. 
  105.      * 
  106.      * @param  string  $address 
  107.      * @param  string  $name 
  108.      * @return \qser\libraries\Mail\Message 
  109.      */  
  110.     public function replyTo($address$name = null)  
  111.     {  
  112.         return $this->addAddresses($address$name‘ReplyTo‘);  
  113.     }  
  114.   
  115.     /** 
  116.      * Add a recipient to the message. 
  117.      * 
  118.      * @param  string|array  $address 
  119.      * @param  string  $name 
  120.      * @param  string  $type 
  121.      * @return \qser\libraries\Mail\Message 
  122.      */  
  123.     protected function addAddresses($address$name$type)  
  124.     {  
  125.         if (is_array($address))  
  126.         {  
  127.             $this->swift->{"set{$type}"}($address$name);  
  128.         }  
  129.         else  
  130.         {  
  131.             $this->swift->{"add{$type}"}($address$name);  
  132.         }  
  133.   
  134.         return $this;  
  135.     }  
  136.   
  137.     /** 
  138.      * Set the subject of the message. 
  139.      * 
  140.      * @param  string  $subject 
  141.      * @return \qser\libraries\Mail\Message 
  142.      */  
  143.     public function subject($subject)  
  144.     {  
  145.         $this->swift->setSubject($subject);  
  146.   
  147.         return $this;  
  148.     }  
  149.   
  150.     /** 
  151.      * Set the message priority level. 
  152.      * 
  153.      * @param  int  $level 
  154.      * @return \qser\libraries\Mail\Message 
  155.      */  
  156.     public function priority($level)  
  157.     {  
  158.         $this->swift->setPriority($level);  
  159.   
  160.         return $this;  
  161.     }  
  162.       
  163.     /** 
  164.      * 编码附件名称(可用于显示中文附件名) 
  165.      *  
  166.      * @param  string  $file 
  167.      *  
  168.      * @return string 
  169.      */  
  170.     public function encodeAttachmentName($name)  
  171.     {  
  172.         return "=?UTF-8?B?" . base64_encode($name) . "?=";  
  173.     }  
  174.   
  175.     /** 
  176.      * Attach a file to the message. 
  177.      * 
  178.      * @param  string  $file 
  179.      * @param  array   $options 
  180.      * @return \qser\libraries\Mail\Message 
  181.      */  
  182.     public function attach($filearray $options = array())  
  183.     {  
  184.         $attachment = $this->createAttachmentFromPath($file);  
  185.   
  186.         return $this->prepAttachment($attachment$options);  
  187.     }  
  188.   
  189.     /** 
  190.      * Create a Swift Attachment instance. 
  191.      * 
  192.      * @param  string  $file 
  193.      * @return \Swift_Attachment 
  194.      */  
  195.     protected function createAttachmentFromPath($file)  
  196.     {  
  197.         return Swift_Attachment::fromPath($file);  
  198.     }  
  199.   
  200.     /** 
  201.      * Attach in-memory data as an attachment. 
  202.      * 
  203.      * @param  string  $data 
  204.      * @param  string  $name 
  205.      * @param  array   $options 
  206.      * @return \qser\libraries\Mail\Message 
  207.      */  
  208.     public function attachData($data$namearray $options = array())  
  209.     {  
  210.         $attachment = $this->createAttachmentFromData($data$name);  
  211.   
  212.         return $this->prepAttachment($attachment$options);  
  213.     }  
  214.   
  215.     /** 
  216.      * Create a Swift Attachment instance from data. 
  217.      * 
  218.      * @param  string  $data 
  219.      * @param  string  $name 
  220.      * @return \Swift_Attachment 
  221.      */  
  222.     protected function createAttachmentFromData($data$name)  
  223.     {  
  224.         return Swift_Attachment::newInstance($data$name);  
  225.     }  
  226.   
  227.     /** 
  228.      * Embed a file in the message and get the CID. 
  229.      * 
  230.      * @param  string  $file 
  231.      * @return string 
  232.      */  
  233.     public function embed($file)  
  234.     {  
  235.         return $this->swift->embed(Swift_Image::fromPath($file));  
  236.     }  
  237.   
  238.     /** 
  239.      * Embed in-memory data in the message and get the CID. 
  240.      * 
  241.      * @param  string  $data 
  242.      * @param  string  $name 
  243.      * @param  string  $contentType 
  244.      * @return string 
  245.      */  
  246.     public function embedData($data$name$contentType = null)  
  247.     {  
  248.         $image = Swift_Image::newInstance($data$name$contentType);  
  249.   
  250.         return $this->swift->embed($image);  
  251.     }  
  252.   
  253.     /** 
  254.      * Prepare and attach the given attachment. 
  255.      * 
  256.      * @param  \Swift_Attachment  $attachment 
  257.      * @param  array  $options 
  258.      * @return \qser\libraries\Mail\Message 
  259.      */  
  260.     protected function prepAttachment($attachment$options = array())  
  261.     {  
  262.         // First we will check for a MIME type on the message, which instructs the  
  263.         // mail client on what type of attachment the file is so that it may be  
  264.         // downloaded correctly by the user. The MIME option is not required.  
  265.         if (isset($options[‘mime‘]))  
  266.         {  
  267.             $attachment->setContentType($options[‘mime‘]);  
  268.         }  
  269.   
  270.         // If an alternative name was given as an option, we will set that on this  
  271.         // attachment so that it will be downloaded with the desired names from  
  272.         // the developer, otherwise the default file names will get assigned.  
  273.         if (isset($options[‘as‘]))  
  274.         {  
  275.             $attachment->setFilename($options[‘as‘]);  
  276.         }  
  277.   
  278.         $this->swift->attach($attachment);  
  279.   
  280.         return $this;  
  281.     }  
  282.   
  283.     /** 
  284.      * Get the underlying Swift Message instance. 
  285.      * 
  286.      * @return \Swift_Message 
  287.      */  
  288.     public function getSwiftMessage()  
  289.     {  
  290.         return $this->swift;  
  291.     }  
  292.   
  293.     /** 
  294.      * Dynamically pass missing methods to the Swift instance. 
  295.      * 
  296.      * @param  string  $method 
  297.      * @param  array   $parameters 
  298.      * @return mixed 
  299.      */  
  300.     public function __call($method$parameters)  
  301.     {  
  302.         $callable = array($this->swift, $method);  
  303.   
  304.         return call_user_func_array($callable$parameters);  
  305.     }  
  306.   
  307. }  

 

 

 


-------- 配置信息如下所示

写道

# Tools 设置
‘app.tools‘ => array(

# mail 工具配置
‘mail‘ => array(
‘class‘ => ‘qser\\app\\tools\\MailTool‘,

‘driver‘ => ‘smtp‘, #Supported: "smtp", "mail", "sendmail"
‘host‘ => ‘smtp.qq.com‘,
‘port‘ => 4650,
‘encryption‘ => ‘ssl‘,
‘username‘ => "noreply@sese.cn",
‘password‘ =>"qwaszyss",
‘pretend‘ => false,#启用此选项,邮件不会真正发送,而是写到日志文件中
‘logger‘ => ‘test‘, #使用日志对象

‘from‘ => array(‘address‘ => ‘noreply@sese.cn‘, ‘name‘ => ‘易结网‘),
),

),
 

qser-mailer: swiftmailer 的快捷助手