Maison > développement back-end > tutoriel php > 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

藏色散人
Libérer: 2023-04-10 08:36:02
avant
4994 Les gens l'ont consulté

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",
},
Copier après la connexion

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
        );
    }
Copier après la connexion

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];
}
Copier après la connexion

Marquer certains e-mails comme lus

/**
 * @param array $mail_ids
 * @return mixed
 */
public function markRead($mail_ids)
{
    return $this->mailbox->markMailsAsRead($mail_ids);
}
Copier après la connexion

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'));
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal