<?php /** * This script can be used either via an ajax call to update cached folders and/or as a cron * job or scheduled task. It simply caches all folders returned from the server. */ use Humps\ImapCacheManager\Memcache\MemcacheFolderCache; use Humps\ImapCacheManager\Memcache\MemcacheServer; use Humps\MailManager\Factories\ImapFactory; use Humps\MailManager\Factories\ImapFolderCollectionFactory; use Humps\MailManager\ImapMailboxService; set_time_limit(0); require_once '../../vendor/autoload.php'; // The memcache server host const HOST = 'localhost'; // The memcache server port const PORT = 11211; $cacheServer = MemcacheServer::connect(HOST, PORT); $cache = new MemcacheFolderCache($cacheServer); // Create the MailboxService so we can access our mailbox $imap = ImapFactory::create('INBOX', '../imap_config/config.php'); $mailboxService = new ImapMailboxService($imap); $folders = ImapFolderCollectionFactory::create($mailboxService->getAllFolders()); $cache->cacheFolders($folders);
<?php error_reporting(E_ERROR); set_time_limit(0); $time_start = microtime(true); use Humps\ImapCacheManager\Helpers\Sorter; use Humps\ImapCacheManager\ImapMessageCache; use Humps\ImapCacheManager\Memcache\MemcacheFolderCache; use Humps\ImapCacheManager\Memcache\MemcacheMessageCache; use Humps\ImapCacheManager\Memcache\MemcacheServer; use Humps\MailManager\Factories\ImapFactory; use Humps\MailManager\ImapMailboxService; require_once '../vendor/autoload.php'; $cacheServer = MemcacheServer::connect('localhost', 11211); $messageCache = new MemcacheMessageCache($cacheServer); $folderCache = new MemcacheFolderCache($cacheServer); $folder = isset($_REQUEST['folder']) ? $_REQUEST['folder'] : 'INBOX'; try { $imap = ImapFactory::create($folder); } catch (Exception $e) { die('Unable to connect to mail server'); } $mailboxService = new ImapMailboxService($imap); $folders = $folderCache->getAllCached(); Sorter::sort($folders, 'name'); // Uses getMailbox() method from the ImapConnection helper trait, or you can do: $imap->getConnection()->getMailbox()->getFolder(); $currentFolder = $mailboxService->getMailbox()->getFolder(); $aliases = $mailboxService->getAliases(); $isTrash = false; if (isset($aliases['trash'])) { if ($aliases['trash'] == $currentFolder) {
/** * @test */ public function it_deletes_the_given_folder_from_the_cache() { $memcache = m::mock(Memcache::class); $memcache->shouldReceive('connect')->andReturn(true); $server = m::mock(MemcacheServer::class, [$memcache, 'foo', 12345]); $cache = ['folder:INBOX', 'folder:Trash']; // Mock cached folders $server->shouldReceive('get')->andReturn($cache); // Deal with the automatic purging of expired values $server->shouldReceive('get')->twice()->andReturn(true); $server->shouldReceive('set')->once()->with('folders', $cache); // Deal with the actual deletion $server->shouldReceive('delete')->with('folder:Trash'); $server->shouldReceive('set')->once()->with('folders', ['folder:INBOX']); // Let's create the object and delete the Trash folder $folderCache = new MemcacheFolderCache($server); $folderCache->uncacheFolder('Trash'); $this->assertEquals(['folder:INBOX'], $folderCache->getKeys()); }