test.php
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
// 实例一个配置
$config = (new \Lib\Imap\ImapConfig())
    // 邮箱
    ->setEmail('zhlong0616@163.com')
    // 密码
    ->setPassword(base64_decode('VEVKSVdPTUJQS09TSFJHSg=='))
    // 必须是 协议+域名+端口
    ->setHost('ssl://imap.163.com:993');
// 获取一个imap连接 必须传入 \Lib\Imap\ImapConfig类
// 返回的是 Lib\Imap\Imap 类
$imap = \Lib\Imap\ImapPool::get($config);
// 登录 必须先登录
$login = $imap->login();
if($login->isOk()){// 登录成功
    /******************** start 文件夹 ************************/
    // 获取文件夹对象
    $folders = $imap->getFolders();
    // 获取 所有目录
    foreach ($folders->all() as $folder){
        $folder->getParseFolder(); // 获取解析过后的目录名称
        $folder->folder; // 获取没有解析的目录名称
    }
    // 获取顶级目录
    foreach ($folders->getTopFolder() as $folder){
        $childs = $folder->getChild(); // 获取 子级目录
        foreach ($childs as $child){
            $child->getChild();
        }
    }
    // 创建一级文件夹
    $imap->folder('你好',false)->create();
    // 创建 二级文件夹
    $imap->folder('你好/大家好',false)->create();
    // 删除 你好 文件夹
    $imap->folder('你好',false)->delete();
    // 把 你好 改成 我好
    $imap->folder('你好',false)->rename('我好',false);
    /******************** end 文件夹 ************************/
    /************************ start 获取某个文件夹下面的邮件 *******************************/
    //                选择文件夹           预备读取  使用分页   查询
    $msgs = $imap->folder('INBOX')->msg()->forPage()->get();
    // 1.使用foreach
    foreach ($msgs as $msg){
        /** @var \Lib\Imap\Parse\MessageItem $msg **/
    }
    // 2.使用 each
    $msgs->each(function (\Lib\Imap\Parse\MessageItem $msg){
        $msg->msgno;// 邮件编号
        $msg->uid;// 邮件唯一id
        $msg->size;// 邮件大小
        $msg->date;// 邮件内部时间,也就是服务器收到邮件的时间
        $msg->flags;// 邮件标签 已读,已回,星标,删除,草稿 最近
        $msg->isAnswered();//已回
        $msg->isDeleted();//删除
        $msg->isDraft();//草稿
        $msg->isFlagged();//星标
        $msg->isRecent();//最近
        $msg->isSeen();// 已读
        /** 头部信息 @see \Lib\Imap\Parse\Header */
        $msg->header->getSubject();// 已解析的主题
        $msg->header->getFrom();// 已解析的发件人
        $msg->header->getTo();// 已解析的收件人
        // 获取某个字段
        $msg->header->get('subject');
        // html内容
        $msg->body->getHtml();
        $msg->body->getHtmlAndImg();
        // 纯文本内容
        $msg->body->getText();
        // 获取附件
        foreach ($msg->body->getAttachment() as $attachment){
            // 存起来
            $attachment->save('/xxx/xxx/xxx.png');
            // 原始 文件名称
            $attachment->getFilename();
            // 后缀
            $attachment->getExtension();
        }
    });
    // 搜索邮箱
    $msg = $imap->folder('INBOX')->msg()->search(
        // 搜索未读 并且 主题有 你好 的
        (new \Lib\Imap\ImapSearch())
            ->seen(false)
            ->subject('你好')
    )->get();
    /*******************************************************/
}else{
    // 登录失败 获取错误消息 $login->getMessage()
    throw new Exception($login->getMessage());
}