PHP code example of phpdot / imap
1. Go to this page and download the library: Download phpdot/imap library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
phpdot / imap example snippets
use PHPdot\Mail\IMAP\ImapClient;
$client = new ImapClient('imap.gmail.com', 993, 'ssl');
$client->connect();
$client->login('[email protected] ', 'app-password');
$inbox = $client->select('INBOX');
echo $inbox->exists . " messages\n";
$messages = $client->fetch('1:10', ['FLAGS', 'ENVELOPE']);
foreach ($messages as $msg) {
echo $msg->envelope->subject . "\n";
}
$unseen = $client->search('UNSEEN');
$client->store('1:3', '+FLAGS', ['\\Seen']);
$folders = $client->listMailboxes();
$status = $client->status('INBOX', ['MESSAGES', 'UNSEEN']);
$client->idle(function ($notification) {
echo $notification->type . "\n";
return true; // keep listening, return false to stop
});
$client->logout();
// Stream — one message at a time, low memory
$client->fetchStream('1:*', ['UID', 'BODY.PEEK[]'], function ($msg) {
file_put_contents("eml/{$msg->uid}.eml", $msg->bodySections[''] ?? '');
});
// Batch with resume
$client->uidFetchStream("{$lastUid}:*", ['UID', 'BODY.PEEK[]'], function ($msg) {
file_put_contents("eml/{$msg->uid}.eml", $msg->bodySections[''] ?? '');
});
// Server-side sort (RFC 5256)
$sorted = $client->sort('(DATE)', 'UNSEEN');
// Threading (RFC 5256)
$threads = $client->thread('REFERENCES');
// CONDSTORE (RFC 7162)
$client->enable(['CONDSTORE']);
// QRESYNC (RFC 7162)
$client->selectQresync('INBOX', $uidValidity, $modseq);
use PHPdot\Mail\IMAP\ImapHandler;
use PHPdot\Mail\IMAP\Connection\ConnectionContext;
use PHPdot\Mail\IMAP\Result\SelectResult;
use PHPdot\Mail\IMAP\Server\Event\LoginEvent;
use PHPdot\Mail\IMAP\Server\Event\SelectEvent;
use PHPdot\Mail\IMAP\Server\Event\FetchEvent;
use PHPdot\Mail\IMAP\Server\StreamServer;
$handler = new ImapHandler();
$handler->onLogin(function (LoginEvent $event, ConnectionContext $ctx): void {
if ($event->username() === 'omar' && $event->password() === 'secret') {
$event->accept();
} else {
$event->reject('Invalid credentials');
}
});
$handler->onSelect(function (SelectEvent $event, ConnectionContext $ctx): void {
$event->accept(new SelectResult(exists: 172, uidValidity: 38505, uidNext: 4392));
});
$handler->onFetch(function (FetchEvent $event, ConnectionContext $ctx): void {
// query your storage, return list<FetchResult>
$event->accept([]);
});
// Run with built-in server
$server = new StreamServer($handler, port: 143);
$server->start();
use PHPdot\Mail\IMAP\Connection\ServerConnection;
// Swoole
$swoole->on('connect', function ($srv, $fd) use ($handler) {
$conn = new ServerConnection($handler);
$connections[$fd] = $conn;
$srv->send($fd, $conn->greeting());
});
$swoole->on('receive', function ($srv, $fd, $r, $data) use (&$connections) {
foreach ($connections[$fd]->onData($data) as $response) {
$srv->send($fd, $response);
}
});
// Workerman, ReactPHP, Amp — same pattern