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')); } }