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

Public Member Functions

 countMessages ($flags=null)
 
 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)
 
 getFolders ($rootFolder=null)
 
 selectFolder ($globalName)
 
 getCurrentFolder ()
 
 createFolder ($name, $parentFolder=null)
 
 removeFolder ($name)
 
 renameFolder ($oldName, $newName)
 
 appendMessage ($message, $folder=null, $flags=null)
 
 copyMessage ($id, $folder)
 
 moveMessage ($id, $folder)
 
 setFlags ($id, $flags)
 
- 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 Attributes

 $_protocol
 
 $_currentFolder = ''
 
- Protected Attributes inherited from Zend_Mail_Storage_Abstract
 $_has
 
 $_iterationPos = 0
 
 $_iterationMax = null
 
 $_messageClass = 'Zend_Mail_Message'
 

Static Protected Attributes

static $_knownFlags
 
static $_searchFlags
 

Detailed Description

Definition at line 66 of file Imap.php.

Constructor & Destructor Documentation

◆ __construct()

__construct (   $params)

create instance with parameters Supported paramters are

  • user username
  • host hostname or ip address of IMAP server [optional, default = 'localhost']
  • password password for user 'username' [optional, default = '']
  • port port for IMAP server [optional, default = 110]
  • ssl 'SSL' or 'TLS' for secure sockets
  • folder select this folder [optional, default = 'INBOX']
Parameters
array$paramsmail reader specific parameters
Exceptions
Zend_Mail_Storage_Exception
Zend_Mail_Protocol_Exception
See also
Zend_Mail_Storage_Exception
Zend_Mail_Storage_Exception
Zend_Mail_Storage_Exception

Definition at line 239 of file Imap.php.

240  {
241  if (is_array($params)) {
242  $params = (object)$params;
243  }
244 
245  $this->_has['flags'] = true;
246 
247  if ($params instanceof Zend_Mail_Protocol_Imap) {
248  $this->_protocol = $params;
249  try {
250  $this->selectFolder('INBOX');
251  } catch(Zend_Mail_Storage_Exception $e) {
255  #require_once 'Zend/Mail/Storage/Exception.php';
256  throw new Zend_Mail_Storage_Exception('cannot select INBOX, is this a valid transport?', 0, $e);
257  }
258  return;
259  }
260 
261  if (!isset($params->user)) {
265  #require_once 'Zend/Mail/Storage/Exception.php';
266  throw new Zend_Mail_Storage_Exception('need at least user in params');
267  }
268 
269  $host = isset($params->host) ? $params->host : 'localhost';
270  $password = isset($params->password) ? $params->password : '';
271  $port = isset($params->port) ? $params->port : null;
272  $ssl = isset($params->ssl) ? $params->ssl : false;
273 
274  $this->_protocol = new Zend_Mail_Protocol_Imap();
275  $this->_protocol->connect($host, $port, $ssl);
276  if (!$this->_protocol->login($params->user, $password)) {
280  #require_once 'Zend/Mail/Storage/Exception.php';
281  throw new Zend_Mail_Storage_Exception('cannot login, user or password wrong');
282  }
283  $this->selectFolder(isset($params->folder) ? $params->folder : 'INBOX');
284  }
selectFolder($globalName)
Definition: Imap.php:460
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18

Member Function Documentation

◆ appendMessage()

appendMessage (   $message,
  $folder = null,
  $flags = null 
)

append a new message to mail storage

Parameters
string$messagemessage as string or instance of message class
null | string | Zend_Mail_Storage_Folder$folderfolder for new message, else current folder is taken
null | array$flagsset flags for new message, else a default set is used
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 572 of file Imap.php.

573  {
574  if ($folder === null) {
575  $folder = $this->_currentFolder;
576  }
577 
578  if ($flags === null) {
579  $flags = array(Zend_Mail_Storage::FLAG_SEEN);
580  }
581 
582  // TODO: handle class instances for $message
583  if (!$this->_protocol->append($folder, $message, $flags)) {
587  #require_once 'Zend/Mail/Storage/Exception.php';
588  throw new Zend_Mail_Storage_Exception('cannot create message, please check if the folder exists and your flags');
589  }
590  }
$message

◆ close()

close ( )

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

Returns
null

Definition at line 292 of file Imap.php.

293  {
294  $this->_currentFolder = '';
295  $this->_protocol->logout();
296  }

◆ copyMessage()

copyMessage (   $id,
  $folder 
)

copy an existing message

Parameters
int$idnumber of message
string | Zend_Mail_Storage_Folder$foldername or instance of targer folder
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 600 of file Imap.php.

601  {
602  if (!$this->_protocol->copy($folder, $id)) {
606  #require_once 'Zend/Mail/Storage/Exception.php';
607  throw new Zend_Mail_Storage_Exception('cannot copy message, does the folder exist?');
608  }
609  }
$id
Definition: fieldset.phtml:14

◆ countMessages()

countMessages (   $flags = null)

Count messages all messages in current box

Returns
int number of messages
Exceptions
Zend_Mail_Storage_Exception
Zend_Mail_Protocol_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 115 of file Imap.php.

116  {
117  if (!$this->_currentFolder) {
121  #require_once 'Zend/Mail/Storage/Exception.php';
122  throw new Zend_Mail_Storage_Exception('No selected folder to count');
123  }
124 
125  if ($flags === null) {
126  return count($this->_protocol->search(array('ALL')));
127  }
128 
129  $params = array();
130  foreach ((array)$flags as $flag) {
131  if (isset(self::$_searchFlags[$flag])) {
132  $params[] = self::$_searchFlags[$flag];
133  } else {
134  $params[] = 'KEYWORD';
135  $params[] = $this->_protocol->escapeString($flag);
136  }
137  }
138  return count($this->_protocol->search($params));
139  }
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18

◆ createFolder()

createFolder (   $name,
  $parentFolder = null 
)

create a new folder

This method also creates parent folders if necessary. Some mail storages may restrict, which folder may be used as parent or which chars may be used in the folder name

Parameters
string$nameglobal name of folder, local name if $parentFolder is set
string | Zend_Mail_Storage_Folder$parentFolderparent folder for new folder, else root folder is parent
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 496 of file Imap.php.

497  {
498  // TODO: we assume / as the hierarchy delim - need to get that from the folder class!
499  if ($parentFolder instanceof Zend_Mail_Storage_Folder) {
500  $folder = $parentFolder->getGlobalName() . '/' . $name;
501  } else if ($parentFolder != null) {
502  $folder = $parentFolder . '/' . $name;
503  } else {
504  $folder = $name;
505  }
506 
507  if (!$this->_protocol->create($folder)) {
511  #require_once 'Zend/Mail/Storage/Exception.php';
512  throw new Zend_Mail_Storage_Exception('cannot create folder');
513  }
514  }
if(!isset($_GET['name'])) $name
Definition: log.php:14

◆ getCurrentFolder()

getCurrentFolder ( )

get Zend_Mail_Storage_Folder instance for current folder

Returns
Zend_Mail_Storage_Folder instance of current folder
Exceptions
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Folder_Interface.

Definition at line 480 of file Imap.php.

481  {
482  return $this->_currentFolder;
483  }

◆ getFolders()

getFolders (   $rootFolder = null)

get root folder or given folder

Parameters
string$rootFolderget folder structure for given folder, else root
Returns
Zend_Mail_Storage_Folder root or wanted folder
Exceptions
Zend_Mail_Storage_Exception
Zend_Mail_Protocol_Exception
See also
Zend_Mail_Storage_Exception
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Folder_Interface.

Definition at line 397 of file Imap.php.

398  {
399  $folders = $this->_protocol->listMailbox((string)$rootFolder);
400  if (!$folders) {
404  #require_once 'Zend/Mail/Storage/Exception.php';
405  throw new Zend_Mail_Storage_Exception('folder not found');
406  }
407 
408  ksort($folders, SORT_STRING);
409  $root = new Zend_Mail_Storage_Folder('/', '/', false);
410  $stack = array(null);
411  $folderStack = array(null);
412  $parentFolder = $root;
413  $parent = '';
414 
415  foreach ($folders as $globalName => $data) {
416  do {
417  if (!$parent || strpos($globalName, $parent) === 0) {
418  $pos = strrpos($globalName, $data['delim']);
419  if ($pos === false) {
420  $localName = $globalName;
421  } else {
422  $localName = substr($globalName, $pos + 1);
423  }
424  $selectable = !$data['flags'] || !in_array('\\Noselect', $data['flags']);
425 
426  array_push($stack, $parent);
427  $parent = $globalName . $data['delim'];
428  $folder = new Zend_Mail_Storage_Folder($localName, $globalName, $selectable);
429  $parentFolder->$localName = $folder;
430  array_push($folderStack, $parentFolder);
431  $parentFolder = $folder;
432  break;
433  } else if ($stack) {
434  $parent = array_pop($stack);
435  $parentFolder = array_pop($folderStack);
436  }
437  } while ($stack);
438  if (!$stack) {
442  #require_once 'Zend/Mail/Storage/Exception.php';
443  throw new Zend_Mail_Storage_Exception('error while constructing folder tree');
444  }
445  }
446 
447  return $root;
448  }
$pos
Definition: list.phtml:42

◆ getMessage()

getMessage (   $id)

Fetch a message

Parameters
int$idnumber of message
Returns
Zend_Mail_Message
Exceptions
Zend_Mail_Protocol_Exception

Definition at line 163 of file Imap.php.

164  {
165  $data = $this->_protocol->fetch(array('FLAGS', 'RFC822.HEADER'), $id);
166  $header = $data['RFC822.HEADER'];
167 
168  $flags = array();
169  foreach ($data['FLAGS'] as $flag) {
170  $flags[] = isset(self::$_knownFlags[$flag]) ? self::$_knownFlags[$flag] : $flag;
171  }
172 
173  return new $this->_messageClass(array('handler' => $this, 'id' => $id, 'headers' => $header, 'flags' => $flags));
174  }
$id
Definition: fieldset.phtml:14

◆ 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
See also
Zend_Mail_Storage_Exception

Definition at line 371 of file Imap.php.

372  {
373  // TODO: use search to find number directly
374  $ids = $this->getUniqueId();
375  foreach ($ids as $k => $v) {
376  if ($v == $id) {
377  return $k;
378  }
379  }
380 
384  #require_once 'Zend/Mail/Storage/Exception.php';
385  throw new Zend_Mail_Storage_Exception('unique id not found');
386  }
getUniqueId($id=null)
Definition: Imap.php:352
$id
Definition: fieldset.phtml:14

◆ getRawContent()

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

Definition at line 211 of file Imap.php.

212  {
213  if ($part !== null) {
214  // TODO: implement
218  #require_once 'Zend/Mail/Storage/Exception.php';
219  throw new Zend_Mail_Storage_Exception('not implemented');
220  }
221 
222  return $this->_protocol->fetch('RFC822.TEXT', $id);
223  }
$id
Definition: fieldset.phtml:14

◆ getRawHeader()

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

Definition at line 187 of file Imap.php.

188  {
189  if ($part !== null) {
190  // TODO: implement
194  #require_once 'Zend/Mail/Storage/Exception.php';
195  throw new Zend_Mail_Storage_Exception('not implemented');
196  }
197 
198  // TODO: toplines
199  return $this->_protocol->fetch('RFC822.HEADER', $id);
200  }
$id
Definition: fieldset.phtml:14

◆ getSize()

getSize (   $id = 0)

get a list of messages with number and size

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

Definition at line 148 of file Imap.php.

149  {
150  if ($id) {
151  return $this->_protocol->fetch('RFC822.SIZE', $id);
152  }
153  return $this->_protocol->fetch('RFC822.SIZE', 1, INF);
154  }
$id
Definition: fieldset.phtml:14

◆ getUniqueId()

getUniqueId (   $id = null)

get unique id for one or all messages

if storage does not support unique ids it's the same as the message number

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 352 of file Imap.php.

353  {
354  if ($id) {
355  return $this->_protocol->fetch('UID', $id);
356  }
357 
358  return $this->_protocol->fetch('UID', 1, INF);
359  }
$id
Definition: fieldset.phtml:14

◆ moveMessage()

moveMessage (   $id,
  $folder 
)

move an existing message

NOTE: imap has no native move command, thus it's emulated with copy and delete

Parameters
int$idnumber of message
string | Zend_Mail_Storage_Folder$foldername or instance of targer folder
Returns
null
Exceptions
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 621 of file Imap.php.

621  {
622  $this->copyMessage($id, $folder);
623  $this->removeMessage($id);
624  }
copyMessage($id, $folder)
Definition: Imap.php:600
$id
Definition: fieldset.phtml:14

◆ noop()

noop ( )

Keep the server busy.

Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Definition at line 304 of file Imap.php.

305  {
306  if (!$this->_protocol->noop()) {
310  #require_once 'Zend/Mail/Storage/Exception.php';
311  throw new Zend_Mail_Storage_Exception('could not do nothing');
312  }
313  }

◆ removeFolder()

removeFolder (   $name)

remove a folder

Parameters
string | Zend_Mail_Storage_Folder$namename or instance of folder
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 523 of file Imap.php.

524  {
525  if ($name instanceof Zend_Mail_Storage_Folder) {
526  $name = $name->getGlobalName();
527  }
528 
529  if (!$this->_protocol->delete($name)) {
533  #require_once 'Zend/Mail/Storage/Exception.php';
534  throw new Zend_Mail_Storage_Exception('cannot delete folder');
535  }
536  }
if(!isset($_GET['name'])) $name
Definition: log.php:14

◆ removeMessage()

removeMessage (   $id)

Remove a message from server. If you're doing that from a web enviroment you should be careful and use a uniqueid as parameter if possible to identify the message.

Parameters
int$idnumber of message
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception
Zend_Mail_Storage_Exception

Definition at line 324 of file Imap.php.

325  {
326  if (!$this->_protocol->store(array(Zend_Mail_Storage::FLAG_DELETED), $id, null, '+')) {
330  #require_once 'Zend/Mail/Storage/Exception.php';
331  throw new Zend_Mail_Storage_Exception('cannot set deleted flag');
332  }
333  // TODO: expunge here or at close? we can handle an error here better and are more fail safe
334  if (!$this->_protocol->expunge()) {
338  #require_once 'Zend/Mail/Storage/Exception.php';
339  throw new Zend_Mail_Storage_Exception('message marked as deleted, but could not expunge');
340  }
341  }
$id
Definition: fieldset.phtml:14
const FLAG_DELETED
Definition: Storage.php:37

◆ renameFolder()

renameFolder (   $oldName,
  $newName 
)

rename and/or move folder

The new name has the same restrictions as in createFolder()

Parameters
string | Zend_Mail_Storage_Folder$oldNamename or instance of folder
string$newNamenew global name of folder
Returns
null
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 548 of file Imap.php.

549  {
550  if ($oldName instanceof Zend_Mail_Storage_Folder) {
551  $oldName = $oldName->getGlobalName();
552  }
553 
554  if (!$this->_protocol->rename($oldName, $newName)) {
558  #require_once 'Zend/Mail/Storage/Exception.php';
559  throw new Zend_Mail_Storage_Exception('cannot rename folder');
560  }
561  }

◆ selectFolder()

selectFolder (   $globalName)

select given folder

folder must be selectable!

Parameters
Zend_Mail_Storage_Folder | string$globalNameglobal name of folder or instance for subfolder
Returns
null
Exceptions
Zend_Mail_Storage_Exception
Zend_Mail_Protocol_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Folder_Interface.

Definition at line 460 of file Imap.php.

461  {
462  $this->_currentFolder = $globalName;
463  if (!$this->_protocol->select($this->_currentFolder)) {
464  $this->_currentFolder = '';
468  #require_once 'Zend/Mail/Storage/Exception.php';
469  throw new Zend_Mail_Storage_Exception('cannot change folder, maybe it does not exist');
470  }
471  }

◆ setFlags()

setFlags (   $id,
  $flags 
)

set flags for message

NOTE: this method can't set the recent flag.

Parameters
int$idnumber of message
array$flagsnew flags for message
Exceptions
Zend_Mail_Storage_Exception
See also
Zend_Mail_Storage_Exception

Implements Zend_Mail_Storage_Writable_Interface.

Definition at line 635 of file Imap.php.

636  {
637  if (!$this->_protocol->store($flags, $id)) {
641  #require_once 'Zend/Mail/Storage/Exception.php';
642  throw new Zend_Mail_Storage_Exception('cannot set flags, have you tried to set the recent flag or special chars?');
643  }
644  }
$id
Definition: fieldset.phtml:14

Field Documentation

◆ $_currentFolder

$_currentFolder = ''
protected

Definition at line 82 of file Imap.php.

◆ $_knownFlags

$_knownFlags
staticprotected
Initial value:

Definition at line 88 of file Imap.php.

◆ $_protocol

$_protocol
protected

Definition at line 76 of file Imap.php.

◆ $_searchFlags

$_searchFlags
staticprotected
Initial value:
= array('\Recent' => 'RECENT',
'\Answered' => 'ANSWERED',
'\Seen' => 'SEEN',
'\Unseen' => 'UNSEEN',
'\Deleted' => 'DELETED',
'\Draft' => 'DRAFT',
'\Flagged' => 'FLAGGED')

Definition at line 100 of file Imap.php.


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