All Projects → mnapoli → imapi

mnapoli / imapi

Licence: other
[EXPERIMENTAL] High level IMAP API for PHP

Programming Languages

PHP
23972 projects - #3 most used programming language

Labels

Projects that are alternatives of or similar to imapi

Chameleon
Customizable honeypots for monitoring network traffic, bots activities and username\password credentials (DNS, HTTP Proxy, HTTP, HTTPS, SSH, POP3, IMAP, STMP, RDP, VNC, SMB, SOCKS5, Redis, TELNET, Postgres and MySQL)
Stars: ✭ 230 (+858.33%)
Mutual labels:  imap
imap-honey
IMAP or SMTP honeypot written in Golang
Stars: ✭ 22 (-8.33%)
Mutual labels:  imap
Matrix-EmailBridge
A bridge written in Golang to receive and write emails in matrix
Stars: ✭ 101 (+320.83%)
Mutual labels:  imap
Rust Imap
IMAP client library for Rust
Stars: ✭ 237 (+887.5%)
Mutual labels:  imap
PySMS
Simple Python API that that allows you to send texts via SMTP with a best effort approach and process replies via IMAP
Stars: ✭ 19 (-20.83%)
Mutual labels:  imap
squirrelmail
🌰️🐿️ SquirrelMail GitHub Repository (PHP 7-OK!)
Stars: ✭ 42 (+75%)
Mutual labels:  imap
Vmime
VMime Mail Library
Stars: ✭ 218 (+808.33%)
Mutual labels:  imap
mail2most
watch emails and send them to mattermost
Stars: ✭ 54 (+125%)
Mutual labels:  imap
enough mail
IMAP, POP3 and SMTP clients for Dart developers. Contains both low level as well as a high level API.
Stars: ✭ 78 (+225%)
Mutual labels:  imap
buzz
A simple system tray application for notifying about unseen e-mail
Stars: ✭ 123 (+412.5%)
Mutual labels:  imap
Example Airflow Dags
Example DAGs using hooks and operators from Airflow Plugins
Stars: ✭ 243 (+912.5%)
Mutual labels:  imap
Davmail
DavMail POP/IMAP/SMTP/Caldav/Carddav/LDAP Exchange and Office 365 Gateway - Synced with main subversion repository at
Stars: ✭ 250 (+941.67%)
Mutual labels:  imap
imail
small mail server
Stars: ✭ 88 (+266.67%)
Mutual labels:  imap
Mailu
Insular email distribution - mail server as Docker images
Stars: ✭ 3,151 (+13029.17%)
Mutual labels:  imap
imap-proto
IMAP protocol parser and datastructures in Rust
Stars: ✭ 12 (-50%)
Mutual labels:  imap
Mailer
A light-weight, modular, message representation and mail delivery framework for Python.
Stars: ✭ 225 (+837.5%)
Mutual labels:  imap
Mailozaurr
Mailozaurr is a PowerShell module that aims to provide SMTP, POP3, IMAP and probably some other ways to interact with Email. Underneath it uses MimeKit and MailKit libraries written by Jeffrey Stedfast.
Stars: ✭ 107 (+345.83%)
Mutual labels:  imap
mnm-hammer
mnm implements TMTP protocol. Let Internet sites message members directly, instead of unreliable, insecure email. Contributors welcome! (Client)
Stars: ✭ 66 (+175%)
Mutual labels:  imap
hermes
Automates programmables à réaction aux échanges électroniques depuis une boîte IMAP4
Stars: ✭ 15 (-37.5%)
Mutual labels:  imap
modoboa-imap-migration
An extension to ease the migration between 2 IMAP servers using offlineimap
Stars: ✭ 14 (-41.67%)
Mutual labels:  imap

imapi

This library is experimental and not meant to be reused.

imapi is a high level IMAP API for PHP.

It aims to be different from other implementations:

  • be very high level: you don't have to know how IMAP works (because IMAP is very ugly)
  • take care of related problems like parse MIME email content or sanitize HTML in emails
  • based on Horde's IMAP library rather than on PHP's IMAP extension (explained below)
  • be full featured, yet leave the door open for low-level calls to Horde's library for uncovered features
  • be maintained (unfortunately IMAP is not a very active topic and many good projects are unfinished or dead)

It is not based on PHP's IMAP extension, but rather on the amazing Horde library. The reason is well explained on Horde's library page:

Horde/Imap_Client is significantly faster, more feature-rich, and extensible when compared to PHP's imap (c-client) extension.

Don't be confused: almost every so-called "PHP IMAP Library" out there is nothing more than a thin-wrapper around the imap extension, so NONE of these libraries can fix the basic limitations of that extension.

Getting started

composer require mnapoli/imapi

The easy way:

$client = Imapi\Client::connect('imap.host.com', 'user', 'password');

If you want full control on the connection, you can use Horde's constructor:

$hordeClient = new Horde_Imap_Client_Socket([
    'username' => $username,
    'password' => $password,
    'hostspec' => $host,
    'port'     => '143',
    'secure'   => 'tls',
]);

$client = new Imapi\Client($hordeClient);

Reading

Reading the inbox

Fetching all the messages from the inbox:

$emails = $client->getEmails();

foreach ($emails as $email) {
    echo $email->getSubject();
}

Yes it's that easy. Emails are objects (Imapi\Email) that expose all the information of the email.

If you need to synchronize emails stored locally with the IMAP server, you will probably not want to fetch the emails, i.e. their content. You can fetch only their ID, which is much faster:

$ids = $client->getEmailIds();

foreach ($ids as $id) {
    if (/* this email needs to be synced */) {
        $email = $client->getEmailFromId($id);
        // ...
    }
}

Advanced queries

Both getEmails() and getEmailIds() can take an optional Query object.

// Read from the `INBOX.Sent` folder
$query = QueryBuilder::create('INBOX.Sent')
    ->youngerThan(3600) // 1 hour
    ->flagSeen(true) // return messages with \\seen flag set, or false for messages with seen flag off. 
                     // more options are flagAnswered(boolean), flagDeleted(boolean),flagDraft(boolean),flagFlaged(boolean),flagRecent(boolean)
    ->getQuery();

$emails = $client->getEmails($query);

Reading folders

$folders = $client->getFolders();

Operations

Moving emails

$emailIds = ['123', '456'];

// Moving from the INBOX to the Archive folder
$client->moveEmails($emailIds, 'INBOX', 'Archive');

Deleting emails

"Deleting" means simply moving to the trash folder. Unfortunately, the trash folder is custom to each provider, so you need to explicitly provide it:

$emailIds = ['123', '456'];

$client->deleteEmails($emailIds, 'Deleted Messages');
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].