Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Protected Member Functions | Protected Attributes
Zend_Mail_Storage_Mbox Class Reference
Inheritance diagram for Zend_Mail_Storage_Mbox:
Zend_Mail_Storage_Abstract Zend_Mail_Storage_Folder_Mbox

Public Member Functions

 countMessages ()
 
 getSize ($id=0)
 
 getMessage ($id)
 
 getRawHeader ($id, $part=null, $topLines=0)
 
 getRawContent ($id, $part=null)
 
 __construct ($params)
 
 close ()
 
 noop ()
 
 removeMessage ($id)
 
 getUniqueId ($id=null)
 
 getNumberByUniqueId ($id)
 
 __sleep ()
 
 __wakeup ()
 
- Public Member Functions inherited from Zend_Mail_Storage_Abstract
 __get ($var)
 
 getCapabilities ()
 
 countMessages ()
 
 getSize ($id=0)
 
 getMessage ($id)
 
 getRawHeader ($id, $part=null, $topLines=0)
 
 getRawContent ($id, $part=null)
 
 __construct ($params)
 
 __destruct ()
 
 close ()
 
 noop ()
 
 removeMessage ($id)
 
 getUniqueId ($id=null)
 
 getNumberByUniqueId ($id)
 
 count ()
 
 offsetExists ($id)
 
 offsetGet ($id)
 
 offsetSet ($id, $value)
 
 offsetUnset ($id)
 
 rewind ()
 
 current ()
 
 key ()
 
 next ()
 
 valid ()
 
 seek ($pos)
 

Protected Member Functions

 _getPos ($id)
 
 _isMboxFile ($file, $fileIsString=true)
 
 _openMboxFile ($filename)
 

Protected Attributes

 $_fh
 
 $_filename
 
 $_filemtime
 
 $_positions
 
 $_messageClass = 'Zend_Mail_Message_File'
 
- Protected Attributes inherited from Zend_Mail_Storage_Abstract
 $_has
 
 $_iterationPos = 0
 
 $_iterationMax = null
 
 $_messageClass = 'Zend_Mail_Message'
 

Detailed Description

Definition at line 48 of file Mbox.php.

Constructor & Destructor Documentation

◆ __construct()

__construct (   $params)

Create instance with parameters Supported parameters are:

  • filename filename of mbox file
Parameters
array$paramsmail reader specific parameters
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 222 of file Mbox.php.

223  {
224  if (is_array($params)) {
225  $params = (object)$params;
226  }
227 
228  if (!isset($params->filename) /* || Zend_Loader::isReadable($params['filename']) */) {
232  #require_once 'Zend/Mail/Storage/Exception.php';
233  throw new Zend_Mail_Storage_Exception('no valid filename given in params');
234  }
235 
236  $this->_openMboxFile($params->filename);
237  $this->_has['top'] = true;
238  $this->_has['uniqueid'] = false;
239  }
_openMboxFile($filename)
Definition: Mbox.php:282
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18

Member Function Documentation

◆ __sleep()

__sleep ( )

magic method for serialize()

with this method you can cache the mbox class

Returns
array name of variables

Definition at line 416 of file Mbox.php.

417  {
418  return array('_filename', '_positions', '_filemtime');
419  }

◆ __wakeup()

__wakeup ( )

magic method for unserialize()

with this method you can cache the mbox class for cache validation the mtime of the mbox file is used

Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 430 of file Mbox.php.

431  {
432  if ($this->_filemtime != @filemtime($this->_filename)) {
433  $this->close();
434  $this->_openMboxFile($this->_filename);
435  } else {
436  $this->_fh = @fopen($this->_filename, 'r');
437  if (!$this->_fh) {
441  #require_once 'Zend/Mail/Storage/Exception.php';
442  throw new Zend_Mail_Storage_Exception('cannot open mbox file');
443  }
444  }
445  }
_openMboxFile($filename)
Definition: Mbox.php:282

◆ _getPos()

_getPos (   $id)
protected

Get positions for mail message or throw exeption if id is invalid

Parameters
int$idnumber of message
Returns
array positions as in _positions
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 121 of file Mbox.php.

122  {
123  if (!isset($this->_positions[$id - 1])) {
127  #require_once 'Zend/Mail/Storage/Exception.php';
128  throw new Zend_Mail_Storage_Exception('id does not exist');
129  }
130 
131  return $this->_positions[$id - 1];
132  }
$id
Definition: fieldset.phtml:14

◆ _isMboxFile()

_isMboxFile (   $file,
  $fileIsString = true 
)
protected

check if given file is a mbox file

if $file is a resource its file pointer is moved after the first line

Parameters
resource | string$filestream resource of name of file
bool$fileIsStringfile is string or resource
Returns
bool file is mbox file

Definition at line 250 of file Mbox.php.

251  {
252  if ($fileIsString) {
253  $file = @fopen($file, 'r');
254  if (!$file) {
255  return false;
256  }
257  } else {
258  fseek($file, 0);
259  }
260 
261  $result = false;
262 
263  $line = fgets($file);
264  if (strpos($line, 'From ') === 0) {
265  $result = true;
266  }
267 
268  if ($fileIsString) {
269  @fclose($file);
270  }
271 
272  return $result;
273  }

◆ _openMboxFile()

_openMboxFile (   $filename)
protected

open given file as current mbox file

Parameters
string$filenamefilename of mbox file
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception
Zend_Mail_Storage_Exception

Definition at line 282 of file Mbox.php.

283  {
284  if ($this->_fh) {
285  $this->close();
286  }
287 
288  $this->_fh = @fopen($filename, 'r');
289  if (!$this->_fh) {
293  #require_once 'Zend/Mail/Storage/Exception.php';
294  throw new Zend_Mail_Storage_Exception('cannot open mbox file');
295  }
296  $this->_filename = $filename;
297  $this->_filemtime = filemtime($this->_filename);
298 
299  if (!$this->_isMboxFile($this->_fh, false)) {
300  @fclose($this->_fh);
304  #require_once 'Zend/Mail/Storage/Exception.php';
305  throw new Zend_Mail_Storage_Exception('file is not a valid mbox format');
306  }
307 
308  $messagePos = array('start' => ftell($this->_fh), 'separator' => 0, 'end' => 0);
309  while (($line = fgets($this->_fh)) !== false) {
310  if (strpos($line, 'From ') === 0) {
311  $messagePos['end'] = ftell($this->_fh) - strlen($line) - 2; // + newline
312  if (!$messagePos['separator']) {
313  $messagePos['separator'] = $messagePos['end'];
314  }
315  $this->_positions[] = $messagePos;
316  $messagePos = array('start' => ftell($this->_fh), 'separator' => 0, 'end' => 0);
317  }
318  if (!$messagePos['separator'] && !trim($line)) {
319  $messagePos['separator'] = ftell($this->_fh);
320  }
321  }
322 
323  $messagePos['end'] = ftell($this->_fh);
324  if (!$messagePos['separator']) {
325  $messagePos['separator'] = $messagePos['end'];
326  }
327  $this->_positions[] = $messagePos;
328  }
_isMboxFile($file, $fileIsString=true)
Definition: Mbox.php:250

◆ close()

close ( )

Close resource for mail lib. If you need to control, when the resource is closed. Otherwise the destructor would call this.

Returns
void

Definition at line 336 of file Mbox.php.

337  {
338  @fclose($this->_fh);
339  $this->_positions = array();
340  }

◆ countMessages()

countMessages ( )

Count messages all messages in current box

Returns
int number of messages
Exceptions
Zend_Mail_Storage_Exception

Definition at line 86 of file Mbox.php.

87  {
88  return count($this->_positions);
89  }

◆ getMessage()

getMessage (   $id)

Fetch a message

Parameters
int$idnumber of message
Returns
Zend_Mail_Message_File
Exceptions
Zend_Mail_Storage_Exception

Definition at line 142 of file Mbox.php.

143  {
144  // TODO that's ugly, would be better to let the message class decide
145  if (strtolower($this->_messageClass) == 'zend_mail_message_file' || is_subclass_of($this->_messageClass, 'zend_mail_message_file')) {
146  // TODO top/body lines
147  $messagePos = $this->_getPos($id);
148  return new $this->_messageClass(array('file' => $this->_fh, 'startPos' => $messagePos['start'],
149  'endPos' => $messagePos['end']));
150  }
151 
152  $bodyLines = 0; // TODO: need a way to change that
153 
154  $message = $this->getRawHeader($id);
155  // file pointer is after headers now
156  if ($bodyLines) {
157  $message .= "\n";
158  while ($bodyLines-- && ftell($this->_fh) < $this->_positions[$id - 1]['end']) {
159  $message .= fgets($this->_fh);
160  }
161  }
162 
163  return new $this->_messageClass(array('handler' => $this, 'id' => $id, 'headers' => $message));
164  }
is_subclass_of($obj, $className)
$id
Definition: fieldset.phtml:14
$message
getRawHeader($id, $part=null, $topLines=0)
Definition: Mbox.php:176

◆ getNumberByUniqueId()

getNumberByUniqueId (   $id)

get a message number from a unique id

I.e. if you have a webmailer that supports deleting messages you should use unique ids as parameter and use this method to translate it to message number right before calling removeMessage()

Parameters
string$idunique id
Returns
int message number
Exceptions
Zend_Mail_Storage_Exception

Definition at line 402 of file Mbox.php.

403  {
404  // check if id exists
405  $this->_getPos($id);
406  return $id;
407  }
$id
Definition: fieldset.phtml:14

◆ getRawContent()

getRawContent (   $id,
  $part = null 
)
See also
Zend_Mail_Storage_Exception

Definition at line 200 of file Mbox.php.

201  {
202  if ($part !== null) {
203  // TODO: implement
207  #require_once 'Zend/Mail/Storage/Exception.php';
208  throw new Zend_Mail_Storage_Exception('not implemented');
209  }
210  $messagePos = $this->_getPos($id);
211  return stream_get_contents($this->_fh, $messagePos['end'] - $messagePos['separator'], $messagePos['separator']);
212  }
$id
Definition: fieldset.phtml:14

◆ getRawHeader()

getRawHeader (   $id,
  $part = null,
  $topLines = 0 
)
See also
Zend_Mail_Storage_Exception

Definition at line 176 of file Mbox.php.

177  {
178  if ($part !== null) {
179  // TODO: implement
183  #require_once 'Zend/Mail/Storage/Exception.php';
184  throw new Zend_Mail_Storage_Exception('not implemented');
185  }
186  $messagePos = $this->_getPos($id);
187  // TODO: toplines
188  return stream_get_contents($this->_fh, $messagePos['separator'] - $messagePos['start'], $messagePos['start']);
189  }
$id
Definition: fieldset.phtml:14

◆ getSize()

getSize (   $id = 0)

Get a list of messages with number and size

Parameters
int | null$idnumber of message or null for all messages
Returns
int|array size of given message of list with all messages as array(num => size)

Definition at line 98 of file Mbox.php.

99  {
100  if ($id) {
101  $pos = $this->_positions[$id - 1];
102  return $pos['end'] - $pos['start'];
103  }
104 
105  $result = array();
106  foreach ($this->_positions as $num => $pos) {
107  $result[$num + 1] = $pos['end'] - $pos['start'];
108  }
109 
110  return $result;
111  }
$id
Definition: fieldset.phtml:14
$pos
Definition: list.phtml:42

◆ getUniqueId()

getUniqueId (   $id = null)

get unique id for one or all messages

Mbox does not support unique ids (yet) - it's always the same as the message number. That shouldn't be a problem, because we can't change mbox files. Therefor the message number is save enough.

Parameters
int | null$idmessage number
Returns
array|string message number for given message or all messages as array
Exceptions
Zend_Mail_Storage_Exception

Definition at line 380 of file Mbox.php.

381  {
382  if ($id) {
383  // check if id exists
384  $this->_getPos($id);
385  return $id;
386  }
387 
388  $range = range(1, $this->countMessages());
389  return array_combine($range, $range);
390  }
$id
Definition: fieldset.phtml:14

◆ noop()

noop ( )

Waste some CPU cycles doing nothing.

Returns
void

Definition at line 348 of file Mbox.php.

349  {
350  return true;
351  }

◆ removeMessage()

removeMessage (   $id)

stub for not supported message deletion

Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 360 of file Mbox.php.

361  {
365  #require_once 'Zend/Mail/Storage/Exception.php';
366  throw new Zend_Mail_Storage_Exception('mbox is read-only');
367  }

Field Documentation

◆ $_fh

$_fh
protected

Definition at line 54 of file Mbox.php.

◆ $_filemtime

$_filemtime
protected

Definition at line 66 of file Mbox.php.

◆ $_filename

$_filename
protected

Definition at line 60 of file Mbox.php.

◆ $_messageClass

$_messageClass = 'Zend_Mail_Message_File'
protected

Definition at line 78 of file Mbox.php.

◆ $_positions

$_positions
protected

Definition at line 72 of file Mbox.php.


The documentation for this class was generated from the following file: