Zend Framework - Zend_Mail
Current view: /usr/local/lib/zend/trunk/incubator/library/Zend/Mail/Storage/Pop3.php
Date: Tue Feb 6 18:30:06 CET 2007 Executable lines: 48
Code covered: 85.42% Executed lines: 41
Legend: executed not executed dead code


       1                 : <?php                                                                                             
       2                 : /**                                                                                               
       3                 :  * Zend Framework                                                                                 
       4                 :  *                                                                                                
       5                 :  * LICENSE                                                                                        
       6                 :  *                                                                                                
       7                 :  * This source file is subject to version 1.0 of the Zend Framework                               
       8                 :  * license, that is bundled with this package in the file LICENSE, and                            
       9                 :  * is available through the world-wide-web at the following URL:                                  
      10                 :  * http://www.zend.com/license/framework/1_0.txt. If you did not receive                          
      11                 :  * a copy of the Zend Framework license and are unable to obtain it                               
      12                 :  * through the world-wide-web, please send a note to license@zend.com                             
      13                 :  * so we can mail you a copy immediately.                                                         
      14                 :  *                                                                                                
      15                 :  * @package    Zend_Mail                                                                          
      16                 :  * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)           
      17                 :  * @license    http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0   
      18                 :  */                                                                                               
      19                 :                                                                                                   
      20                 :                                                                                                   
      21                 : /**                                                                                               
      22                 :  * Zend_Mail_Storage_Abstract                                                                     
      23                 :  */                                                                                               
      24                 : require_once 'Zend/Mail/Storage/Abstract.php';                                                    
      25                 :                                                                                                   
      26                 : /**                                                                                               
      27                 :  * Zend_Mail_Transport_Pop3                                                                       
      28                 :  */                                                                                               
      29                 : require_once 'Zend/Mail/Transport/Pop3.php';                                                      
      30                 :                                                                                                   
      31                 : /**                                                                                               
      32                 :  * Zend_Mail_Message                                                                              
      33                 :  */                                                                                               
      34                 : require_once 'Zend/Mail/Message.php';                                                             
      35                 :                                                                                                   
      36                 : /**                                                                                               
      37                 :  * Zend_Mail_Storage_Exception                                                                    
      38                 :  */                                                                                               
      39                 : require_once 'Zend/Mail/Storage/Exception.php';                                                   
      40                 :                                                                                                   
      41                 : /**                                                                                               
      42                 :  * @package    Zend_Mail                                                                          
      43                 :  * @copyright  Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com)           
      44                 :  * @license    http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0   
      45                 :  */                                                                                               
      46                 : class Zend_Mail_Storage_Pop3 extends Zend_Mail_Storage_Abstract                                   
      47                 : {                                                                                                 
      48                 :     private $_protocol;                                                                           
      49                 :                                                                                                   
      50                 :                                                                                                   
      51                 :     /**                                                                                           
      52                 :      *                                                                                            
      53                 :      * Count messages all messages in current box                                                 
      54                 :      * No flags are supported by POP3 (exceptions is thrown)                                      
      55                 :      *                                                                                            
      56                 :      * @param int filter by flags                                                                 
      57                 :      * @return int number of messages                                                             
      58                 :      * @throws Zend_Mail_Storage_Exception                                                        
      59                 :      */                                                                                           
      60                 :     public function countMessages($flags = null)                                                  
      61                 :     {                                                                                             
      62               1 :         if($flags) {                                                                              
      63               0 :             throw new Zend_Mail_Storage_Exception('POP3 does not support flags');                 
      64                 :         }                                                                                         
      65               1 :         $this->_protocol->status($count, $null);                                                  
      66               1 :         return (int)$count;                                                                       
      67                 :     }                                                                                             
      68                 :                                                                                                   
      69                 :     /**                                                                                           
      70                 :      * get a list of messages with number and size                                                
      71                 :      *                                                                                            
      72                 :      * @param int number of message                                                               
      73                 :      * @return int|array size of given message of list with all messages as array(num => size)    
      74                 :      */                                                                                           
      75                 :     public function getSize($id = 0)                                                              
      76                 :     {                                                                                             
      77               2 :         $id = $id ? $id : null;                                                                   
      78               2 :         return $this->_protocol->getList($id);                                                    
      79                 :     }                                                                                             
      80                 :                                                                                                   
      81                 :     /**                                                                                           
      82                 :      *                                                                                            
      83                 :      * get a message with headers and body                                                        
      84                 :      *                                                                                            
      85                 :      * @param int number of message                                                               
      86                 :      * @return Zend_Mail_Message                                                                  
      87                 :      */                                                                                           
      88                 :     public function getMessage($id)                                                               
      89                 :     {                                                                                             
      90               5 :         $bodyLines = 0;                                                                           
      91               5 :         $message = $this->_protocol->top($id, $bodyLines, true);                                  
      92                 :                                                                                                   
      93               3 :         return new Zend_Mail_Message(array('handler' => $this, 'id' => $id, 'headers' => $message,
      94               3 :                                            'noToplines' => $bodyLines < 1));                      
      95                 :     }                                                                                             
      96                 :                                                                                                   
      97                 :     public function getRaw($id, $part)                                                            
      98                 :     {                                                                                             
      99                 :         // TODO: indexes for header and content should be changed to negative numbers             
     100                 :         switch($part) {                                                                           
     101               1 :             case 'header':                                                                        
     102               0 :                 return $this->_protocol->top($id, 0, true);                                       
     103                 :                 break;                                                                            
     104               1 :             case 'content':                                                                       
     105               1 :                 $content = $this->_protocol->retrive($id);                                        
     106                 :                 // TODO: find a way to avoid decoding the headers                                 
     107               1 :                 Zend_Mime_Decode::splitMessage($content, $null, $body);                           
     108               1 :                 return $body;                                                                     
     109                 :                 break;                                                                            
     110               0 :             default:                                                                              
     111                 :                 // fall through                                                                   
     112               0 :         }                                                                                         
     113                 :                                                                                                   
     114                 :         // TODO: check for number or mime type                                                    
     115               0 :         throw new Zend_Mail_Storage_Exception('part not found');                                  
     116                 :     }                                                                                             
     117                 :                                                                                                   
     118                 :                                                                                                   
     119                 :     /**                                                                                           
     120                 :      *                                                                                            
     121                 :      * create instance with parameters                                                            
     122                 :      * Supported paramters are                                                                    
     123                 :      *   - host hostname or ip address of POP3 server                                             
     124                 :      *   - user username                                                                          
     125                 :      *   - password password for user 'username' [optional, default = '']                         
     126                 :      *   - port port for POP3 server [optional, default = 110]                                    
     127                 :      *   - ssl 'SSL' or 'TLS' for secure sockets                                                  
     128                 :      *                                                                                            
     129                 :      * @param  $params array  mail reader specific parameters                                     
     130                 :      * @throws Zend_Mail_Storage_Exception                                                        
     131                 :      */                                                                                           
     132                 :     public function __construct($params)                                                          
     133                 :     {                                                                                             
     134              19 :         $this->_has['fetchPart'] = false;                                                         
     135                 :                                                                                                   
     136              19 :         if($params instanceof Zend_Mail_Transport_Pop3) {                                         
     137               1 :             $this->_protocol = $params;                                                           
     138               1 :             return;                                                                               
     139                 :         }                                                                                         
     140                 :                                                                                                   
     141              18 :         if(!isset($params['user'])) {                                                             
     142               1 :             throw new Zend_Mail_Storage_Exception('need at least user in params');                
     143                 :         }                                                                                         
     144                 :                                                                                                   
     145              17 :         $params['host']     = isset($params['host'])     ? $params['host']     : 'localhost';     
     146              17 :         $params['password'] = isset($params['password']) ? $params['password'] : '';              
     147              17 :         $params['port']     = isset($params['port'])     ? $params['port']     : null;            
     148              17 :         $params['ssl']      = isset($params['ssl']) ? $params['ssl'] : false;                     
     149                 :                                                                                                   
     150              17 :         $this->_protocol = new Zend_Mail_Transport_Pop3();                                        
     151              17 :         $this->_protocol->connect($params['host'], $params['port'], $params['ssl']);              
     152              14 :         $this->_protocol->login($params['user'], $params['password']);                            
     153              14 :     }                                                                                             
     154                 :                                                                                                   
     155                 :                                                                                                   
     156                 :     /**                                                                                           
     157                 :      *                                                                                            
     158                 :      * public destructor                                                                          
     159                 :      */                                                                                           
     160                 :     public function __destruct()                                                                  
     161                 :     {                                                                                             
     162              15 :         $this->close();                                                                           
     163              15 :     }                                                                                             
     164                 :                                                                                                   
     165                 :     /**                                                                                           
     166                 :      *                                                                                            
     167                 :      * Close resource for mail lib. If you need to control, when the resource                     
     168                 :      * is closed. Otherwise the destructor would call this.                                       
     169                 :      *                                                                                            
     170                 :      */                                                                                           
     171                 :     public function close()                                                                       
     172                 :     {                                                                                             
     173              15 :         $this->_protocol->logout();                                                               
     174              15 :     }                                                                                             
     175                 :                                                                                                   
     176                 :     /**                                                                                           
     177                 :      *                                                                                            
     178                 :      * Keep the server busy.                                                                      
     179                 :      *                                                                                            
     180                 :      */                                                                                           
     181                 :     public function noop()                                                                        
     182                 :     {                                                                                             
     183               1 :         return $this->_protocol->noop();                                                          
     184                 :     }                                                                                             
     185                 :                                                                                                   
     186                 :     /**                                                                                           
     187                 :      *                                                                                            
     188                 :      * Remove a message from server. If you're doing that from a web enviroment                   
     189                 :      * you should be careful and use a uniqueid as parameter if possible to                       
     190                 :      * identify the message.                                                                      
     191                 :      *                                                                                            
     192                 :      * @param int number of message                                                               
     193                 :      */                                                                                           
     194                 :     public function removeMessage($id)                                                            
     195                 :     {                                                                                             
     196               0 :         $this->_protocol->delete($id);                                                            
     197               0 :     }                                                                                             
     198                 :                                                                                                   
     199                 :     /**                                                                                           
     200                 :      *                                                                                            
     201                 :      * Special handling for hasTop. The headers of the first message is                           
     202                 :      * retrieved if Top wasn't needed/tried yet.                                                  
     203                 :      *                                                                                            
     204                 :      * @see Zend_Mail_Storage_Abstract:__get()                                                    
     205                 :      */                                                                                           
     206                 :     public function __get($var)                                                                   
     207                 :     {                                                                                             
     208               2 :         if(strtolower($var) == 'hastop') {                                                        
     209               1 :             if($this->_protocol->hasTop === null) {                                               
     210                 :                 // need to make a real call, because not all server are honest in their capas     
     211                 :                 try {                                                                             
     212               1 :                     $this->_protocol->top(1, 0, false);                                           
     213               1 :                 } catch(Exception $e) {                                                           
     214                 :                     // ignoring error                                                             
     215                 :                 }                                                                                 
     216               1 :             }                                                                                     
     217               1 :             return $this->_protocol->hasTop;                                                      
     218                 :         }                                                                                         
     219                 :                                                                                                   
     220               1 :         return parent::__get($var);                                                               
     221                 :     }                                                                                             
     222                 : }                                                                                                 
     223                 : 

Generated by: PHPUnit 3.0.0 and Xdebug 2.0.0RC2-dev.