mailbox, messageiterator and message class connected
This commit is contained in:
parent
bf6fb8c3ed
commit
f7faa6541d
|
@ -98,7 +98,7 @@ class Connection
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function reconnect($folder)
|
||||
public function reconnect($folder = "INBOX")
|
||||
{
|
||||
try {
|
||||
imap_reopen($this->stream, "{" . $this->server . ":" . $this->port . $this->flag . "}" . $folder);
|
||||
|
@ -107,6 +107,13 @@ class Connection
|
|||
}
|
||||
}
|
||||
|
||||
public function survive($folder = "INBOX")
|
||||
{
|
||||
if( !$this->ping() || ($this->folder != $folder) ) {
|
||||
$this->reconnect($folder);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Timeout
|
||||
*
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @author clivern <hello@clivern.com>
|
||||
*/
|
||||
|
||||
namespace Clivern\Imap\Core;
|
||||
|
||||
/**
|
||||
* Folder Class
|
||||
*
|
||||
* @package Clivern\Imap\Core
|
||||
*/
|
||||
class Folder
|
||||
{
|
||||
#~
|
||||
}
|
|
@ -92,11 +92,11 @@ class Message
|
|||
*/
|
||||
public function config()
|
||||
{
|
||||
if( !this->msg_number && $this->uid ){
|
||||
if( !$this->msg_number && $this->uid ){
|
||||
$this->msg_number = imap_msgno($this->connection->getStream(), $this->uid);
|
||||
}
|
||||
|
||||
if( !this->uid && $this->msg_number ){
|
||||
if( !$this->uid && $this->msg_number ){
|
||||
$this->uid = imap_uid($this->connection->getStream(), $this->msg_number);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,61 +6,38 @@
|
|||
namespace Clivern\Imap\Core;
|
||||
|
||||
use Clivern\Imap\Core\Message;
|
||||
use Clivern\Imap\Core\Connection;
|
||||
|
||||
/**
|
||||
* Message Iterator Class
|
||||
*
|
||||
* @package Clivern\Imap\Core
|
||||
*/
|
||||
class MessageIterator
|
||||
class MessageIterator extends \ArrayIterator
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $messages = [];
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* Add Message
|
||||
* Constructor
|
||||
*
|
||||
* @param Message $message
|
||||
* @return void
|
||||
* @param Connection $connection
|
||||
* @param array $message_numbers
|
||||
*/
|
||||
public function add(Message $message)
|
||||
public function __construct(Connection $connection, array $message_numbers)
|
||||
{
|
||||
$this->messages[$message->getId()] = $message;
|
||||
$this->connection = $connection;
|
||||
parent::__construct($message_numbers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if Message Exists
|
||||
* Get current message
|
||||
*
|
||||
* @param integer $message_id
|
||||
* @return boolean
|
||||
*/
|
||||
public function has($message_id)
|
||||
{
|
||||
return (boolean) isset($this->messages[$message_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Message
|
||||
*
|
||||
* @param integer $message_id
|
||||
* @return Message
|
||||
*/
|
||||
public function get($message_id)
|
||||
public function current()
|
||||
{
|
||||
return $this->messages[$message_id];
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove Message
|
||||
*
|
||||
* @param integer $message_id
|
||||
* @return boolean
|
||||
*/
|
||||
public function remove($message_id)
|
||||
{
|
||||
return (boolean) unset($this->messages[$message_id]);
|
||||
$message = new Message($this->connection);
|
||||
return $message->setUid(parent::current())->config();
|
||||
}
|
||||
}
|
53
src/Core/Search.php
Normal file
53
src/Core/Search.php
Normal file
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
/**
|
||||
* @author clivern <hello@clivern.com>
|
||||
*/
|
||||
|
||||
namespace Clivern\Imap\Core;
|
||||
|
||||
/**
|
||||
* Search Class
|
||||
*
|
||||
* @package Clivern\Imap\Core
|
||||
*/
|
||||
class Search
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $conditions = [];
|
||||
|
||||
/**
|
||||
* Add Condition
|
||||
*
|
||||
* @param string $condition
|
||||
* @return Search
|
||||
*/
|
||||
public function addCondition($condition)
|
||||
{
|
||||
$this->conditions[] = $condition;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Conditions
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getConditions()
|
||||
{
|
||||
return $this->conditions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Conditions Query
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return (!empty($this->conditions)) ? implode(" ", $this->conditions) : "";
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* @author clivern <hello@clivern.com>
|
||||
*/
|
||||
|
||||
namespace Clivern\Imap\Core;
|
||||
|
||||
/**
|
||||
* Tools Class
|
||||
*
|
||||
* @package Clivern\Imap\Core
|
||||
*/
|
||||
class Tools
|
||||
{
|
||||
#~
|
||||
}
|
119
src/MailBox.php
119
src/MailBox.php
|
@ -6,9 +6,9 @@
|
|||
namespace Clivern\Imap;
|
||||
|
||||
use Clivern\Imap\Core\Connection;
|
||||
use Clivern\Imap\Core\Folder;
|
||||
use Clivern\Imap\Core\MessageIterator;
|
||||
use Clivern\Imap\Core\Tools;
|
||||
use Clivern\Imap\Core\Message;
|
||||
use Clivern\Imap\Core\Search;
|
||||
|
||||
/**
|
||||
* MailBox Class
|
||||
|
@ -18,56 +18,107 @@ use Clivern\Imap\Core\Tools;
|
|||
class MailBox
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $folder;
|
||||
|
||||
/**
|
||||
* @var Connection
|
||||
*/
|
||||
protected $connection;
|
||||
|
||||
/**
|
||||
* @var Folder
|
||||
*/
|
||||
protected $folder;
|
||||
|
||||
/**
|
||||
* @var MessageIterator
|
||||
*/
|
||||
protected $message_iterator;
|
||||
|
||||
/**
|
||||
* @var Tools
|
||||
*/
|
||||
protected $tools;
|
||||
|
||||
/**
|
||||
* MailBox Constructor
|
||||
* Constructor
|
||||
*
|
||||
* @param Connection $connection
|
||||
* @param Folder $folder
|
||||
* @param MessageIterator $message_iterator
|
||||
* @param Tools $tools
|
||||
* @param Connection $connection IMAP connection
|
||||
*/
|
||||
public function __construct(Connection $connection, Folder $folder, MessageIterator $message_iterator, Tools $tools)
|
||||
public function __construct(Connection $connection)
|
||||
{
|
||||
$this->connection = $connection;
|
||||
$this->folder = $folder;
|
||||
$this->message_iterator = $message_iterator;
|
||||
$this->tools = $tools
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Message Iterator
|
||||
* Set Folder Name
|
||||
*
|
||||
* @return MessageIterator
|
||||
* @param string $folder
|
||||
* @return MailBox
|
||||
*/
|
||||
public function getMessageIterator()
|
||||
public function setFolder($folder)
|
||||
{
|
||||
return $this->message_iterator;
|
||||
$this->folder = $folder;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function get()
|
||||
/**
|
||||
* Get Folder name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getFolder()
|
||||
{
|
||||
return "test";
|
||||
return $this->folder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get number of messages in this mailbox
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
$this->connection->survive($this->folder);
|
||||
return imap_num_msg($this->connection->getStream());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message ids
|
||||
*
|
||||
* @param Search $search
|
||||
* @return MessageIterator|Message[]
|
||||
*/
|
||||
public function getMessages(Search $search = null)
|
||||
{
|
||||
$this->connection->survive($this->folder);
|
||||
$query = ($search) ? (string) $search : 'ALL';
|
||||
$message_numbers = imap_search($this->connection->getStream(), $query, \SE_UID);
|
||||
|
||||
if (false == $message_numbers) {
|
||||
// imap_search can also return false
|
||||
$message_numbers = [];
|
||||
}
|
||||
|
||||
return new MessageIterator($this->connection, $message_numbers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a message by message number or uid
|
||||
*
|
||||
* @param int|boolean $message_number
|
||||
* @param int|boolean $message_uid
|
||||
* @return Message
|
||||
*/
|
||||
public function getMessage($message_number = false, $message_uid = false)
|
||||
{
|
||||
$this->connection->survive($this->folder);
|
||||
|
||||
$message = new Message($this->connection);
|
||||
|
||||
if( $message_number == false ){
|
||||
return $message->setUid($message_uid)->config();
|
||||
}else{
|
||||
return $message->setMsgNo($message_number)->config();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all messages marked for deletion
|
||||
*
|
||||
* @return Mailbox
|
||||
*/
|
||||
public function expunge()
|
||||
{
|
||||
$this->connection->survive($this->folder);
|
||||
imap_expunge($this->connection->getStream());
|
||||
}
|
||||
}
|
19
tests/Core/SearchTest.php
Normal file
19
tests/Core/SearchTest.php
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
namespace Tests\Core;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class SearchTest extends TestCase
|
||||
{
|
||||
public function testConditionBuilder()
|
||||
{
|
||||
$search = new \Clivern\Imap\Core\Search();
|
||||
$search->addCondition('RECENT')->addCondition('BCC "string"')->addCondition('NEW');
|
||||
$this->assertEquals($search->getConditions(), [
|
||||
'RECENT',
|
||||
'BCC "string"',
|
||||
'NEW'
|
||||
]);
|
||||
$this->assertEquals((string) $search, 'RECENT BCC "string" NEW');
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue