Search by

rdx / imap

rudiedirkx

There is no license information available for the latest version (3.1) of this package.

imap reading

3.1 2026-11-07 17:29 UTC

This package is auto-updated.

Last update: 2026-11-07 17:30:33 UTC


README

IMAP reading in pure PHP, without ext-imap.

3.x is a complete rewrite of 2.x. Nothing carries over: not the classes, not the methods, not the config.

Connecting

$mailbox = ImapMailbox::fromDsn('imaps://user:pass@imap.example.com/INBOX');

$mailbox = new ImapMailbox(
	host: 'imap.example.com',
	username: 'user',
	password: 'pass',
);

imaps:// is SSL (port 993), imap:// is STARTTLS (port 143). The mailbox defaults to INBOX. URL-encode special characters in the DSN.

Totals

$mailbox->getTotalMessages(); // int
$mailbox->getTotalUnseenMessages(); // int

Reading messages

$messages = $mailbox->getAllIterator(limit: 50); // generator of ImapMessage
$messages = $mailbox->getAllSinceIterator('2026-10-30', limit: 50); // generator of ImapMessage
$messages = $mailbox->getUnseenIterator(limit: 50); // generator of ImapMessage

$messages->getTotal(); // int
foreach ($messages as $message) {
	$message->getSubject(); // ?string
	$message->getDatetime(); // ?DateTimeImmutable
	$message->getHeader('Reply-to'); // ?string
	$message->getAddress('From'); // ?string
	$message->getAddresses('To'); // list<string>
}

The iterator can be looped only once.

Changing

$mailbox->markSeen($message);
$mailbox->deleteOneMessage($message);
$mailbox->deleteManyUids($uids);
$mailbox->expunge(); // int

deleteOneMessage() and deleteManyUids() only flag messages. expunge() removes all flagged messages and returns how many.