0

0

详解使用php-imap查询操作邮件收件箱

藏色散人

藏色散人

发布时间:2021-06-18 16:32:05

|

5259人浏览过

|

来源于segmentfault

转载

本篇文章带大家介绍使用php-imap查询操作邮件收件箱。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

最近在业务场景里有接收解析用户主动发送的邮件,使用php-imap实现了这一需求,记录一下。

确定实现方式

读取邮件的协议有POP3IMAP两种,区别:POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作,不会反馈到服务器上。IMAP提供webmail与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

需求要求处理完用户的邮件以后,将邮件标记为已处理,因此选用IMAP协议。

安装依赖

本地、服务器php均需要安装imap扩展。在项目的composer.json中添加php-imap(https://github.com/barbushin/php-imap)扩展如下:

Smart Picture
Smart Picture

Smart Picture 智能高效的图片处理工具

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

配置相关服务

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

获取所有未读邮件列表

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];
}

将某些邮件标记为已读

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

搜索指定主题的邮件并标记为已读

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

推荐学习:《PHP视频教程

立即学习PHP免费学习笔记(深入)”;

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号