Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation de php-imap pour interroger et faire fonctionner la boîte de réception de courrier électronique

Explication détaillée de l'utilisation de php-imap pour interroger et faire fonctionner la boîte de réception de courrier électronique

藏色散人
藏色散人avant
2021-06-18 16:32:054925parcourir

Cet article explique comment utiliser php-imap pour interroger et gérer les boîtes de réception de courrier électronique. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Récemment, dans des scénarios professionnels, j'ai reçu et analysé des e-mails activement envoyés par des utilisateurs, et j'ai utilisé php-imap pour répondre à ces exigences, enregistrez-les.

Déterminer la méthode de mise en œuvre

Il existe deux protocoles pour lire les emails : POP3 et IMAP La différence : Le protocole POP3 permet au client de messagerie. pour télécharger le serveur Mail sur le client, mais les opérations sur le client ne seront pas renvoyées au serveur. IMAP Fournit une communication bidirectionnelle entre les clients de messagerie Web et de messagerie. Les opérations sur le client seront renvoyées au serveur. Pour les opérations sur les e-mails, les e-mails sur le serveur prendront également les actions correspondantes. L'exigence

exige qu'après avoir traité l'e-mail de l'utilisateur, l'e-mail soit marqué comme traité, le protocole IMAP est donc sélectionné.

Dépendances d'installation

PHP local et serveur doivent installer l'extension imap. Ajoutez l'extension php-imap (https://github.com/barbushin/php-imap) au composer.json du projet comme suit :

"require": {
  "php-imap/php-imap": "^3.1",
},

Configurer les services associés

namespace app\library\service\mail;

use PhpImap\Exceptions\ConnectionException;
use PhpImap\Mailbox;

/**
 * 收邮件服务邮件API接口
 * Class PlayService
 * @package app\library\service
 */
class ImapService
{
    public $path = '{imap.263.net:993/imap/ssl}INBOX';   // IMAP server and mailbox folder
    public $login = 'user@263.cn';         // Username for the before configured mailbox
    public $password = 'pwd';                   // Password for the before configured username
    public $dir = null;        // Directory, where attachments will be saved (optional)
    public $encoding = 'UTF-8';   // Server encoding (optional)

    public $mailbox;

    public function __construct()
    {
        $this->mailbox = new Mailbox(
            $this->path,
            $this->login,
            $this->password,
            $this->dir,
            $this->encoding
        );
    }

Obtenir tout ce qui n'est pas lu Liste de diffusion

public function unSeenList()
{
    try {
        $mail_ids = $this->mailbox->searchMailbox('UNSEEN');
    } catch (ConnectionException $ex) {
        die('IMAP connection failed: ' . $ex->getMessage());
    } catch (\Exception $ex) {
        die('An error occured: ' . $ex->getMessage());
    }

    // If $mailsIds is empty, no emails could be found
    if (!$mail_ids) {
        die('Mailbox is empty');
    }

    try {
        $info = $this->mailbox->getMailsInfo($mail_ids);
    } catch (ConnectionException $ex) {
        echo "IMAP connection failed: " . $ex;
        die();
    }
    return ['ids' => $mail_ids, 'list' => $info];
}

Marquer certains e-mails comme lus

/**
 * @param array $mail_ids
 * @return mixed
 */
public function markRead($mail_ids)
{
    return $this->mailbox->markMailsAsRead($mail_ids);
}

Rechercher des e-mails avec des sujets spécifiés et les marquer comme lus

$imap = new ImapService();
$condition = 'UNSEEN  SUBJECT "' . $title . '" SINCE "' . date('Y-m-d', strtotime('-1 days')) . '" FROM ' . $mail;
$data['mail'] = $imap->mailbox->searchMailbox($condition);
if (!empty($data['mail'])) {
    $data['info'] = $imap->mailbox->getMailsInfo($data['mail']);
    if ($params['mark'] == 1) {
        $data['mark'] = $imap->markRead(array_column($data['info'], 'uid'));
    }
}

Apprentissage recommandé : "PHP tutoriel vidéo

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer