1. 相关资料
composer require php-imap/php-imap
2. php-imap 成员
2.1 构造方法
| 参数 |
说明 |
示例 |
| $imapPath |
服务地址 |
{imap.163.com:143} |
| $login |
登录名 |
email@163.com |
| $password |
登录密码 |
*** |
| $attachmentsDir |
附件存储目录 ,如果设置了这个参数 ,邮件中的附件会自动存储到这个目录 |
- |
| $serverEncoding |
服务器使用的字符编码 |
- |
/**
* @param string $imapPath
* @param string $login
* @param string $password
* @param string $attachmentsDir
* @param string $serverEncoding
*
* @throws InvalidParameterException
*/
public function __construct($imapPath, $login, $password, $attachmentsDir = null, $serverEncoding = 'UTF-8')
{
$this->imapPath = trim($imapPath);
$this->imapLogin = trim($login);
$this->imapPassword = $password;
$this->setServerEncoding($serverEncoding);
if (null != $attachmentsDir) {
$this->setAttachmentsDir($attachmentsDir);
}
}
2.2 邮件信息相关的成员
| 成员 |
所属类 |
说明 |
示例 |
searchMailbox( disableServerEncoding = false) |
PhpImap\Mailbox |
根据 criteria 参数参见 https://www.php.net/imap_search
|
- |
getMail( markAsSeen = true) |
PhpImap\Mailbox |
根据邮件的 $mailId 获取邮件数据 ,如果获取了附件并设置了附件的默认存储路径 ,它会自动将邮件附件保存到该路径 ,返回 PhpImap\IncomingMail 实例 |
- |
| getMailHeader($mailId) |
PhpImap\Mailbox |
根据邮件的 $mailId 获取邮件数据 ,返回 PhpImap\IncomingMailHeader 实例 |
- |
| getMailsInfo(array $mailsIds) |
PhpImap\Mailbox |
获取一组邮件的信息 |
Array ( [0] => stdClass Object ( [subject] => test [from] => 苍松 拔雨 [to] => "cangsongbayu@163.com" [date] => Sun, 5 Jan 2020 22:39:23 +0000 [message_id] => [size] => 7364 [uid] => 1524851185 [msgno] => 1 [recent] => 0 [flagged] => 0 [answered] => 0 [deleted] => 0 [seen] => 0 [draft] => 0 [udate] => 1578263965 ) ) |
| $textPlain |
PhpImap\IncomingMail |
以普通文本格式返回邮件内容 |
- |
| $textHtml |
PhpImap\IncomingMail |
以 HTML 格式返回邮件内容 |
- |
| embedImageAttachments() |
PhpImap\IncomingMail |
将 $textHtml 中的图片转为 base64 |
- |
getRawMail( markAsSeen = true) |
PhpImap\Mailbox |
返回邮件的原始数据信息 |
- |
| getMailMboxFormat($mailId) |
PhpImap\Mailbox |
以 MBOX 格式返回邮件内容 |
- |
2.3 邮件附件相关的成员
| 成员 |
所属类 |
说明 |
示例 |
| hasAttachments() |
PhpImap\IncomingMail |
如果邮件中有附件返回 true |
- |
| getAttachments() |
PhpImap\IncomingMail |
返回一个数组 ,数组的每一项都是 PhpImap\IncomingMailAttachment 实例 |
- |
| removeAttachment($id) |
PhpImap\IncomingMail |
根据附件的 id 删除附件( 不会删除文件 ) |
- |
| setAttachmentsIgnore($attachmentsIgnore) |
PhpImap\Mailbox |
设置是否获取邮件中的附件 |
- |
| getAttachmentsIgnore() |
PhpImap\Mailbox |
返回 bool ,true 表示是否自动获取附件 |
- |
| setAttachmentsDir($attachmentsDir) |
PhpImap\Mailbox |
设置附件的存储路径 |
- |
| getAttachmentsDir() |
PhpImap\Mailbox |
返回当前设置的附件存储路径 |
- |
| $id |
PhpImap\IncomingMailAttachment |
附件的 id |
08fda0244b5397e030ee401fd2bea5b24f78a72b |
| $name |
PhpImap\IncomingMailAttachment |
附件的文件名称 |
imap.jpg |
| $file_path |
PhpImap\IncomingMailAttachment |
附件的存储路径 ,访问这个值时应该使用属性名 filePath ,否则会抛出一个 Notice |
/var/www/uploads/1524851183_08fda0244b5397e030ee401fd2bea5b24f78a72b_2.jpg |
| getMimeType() |
PhpImap\IncomingMailAttachment |
返回附件的 MIME 类型 |
image/jpeg; charset=binary |
| getContents() |
PhpImap\IncomingMailAttachment |
返回附件的内容 |
- |
| setFilePath($filePath) |
PhpImap\IncomingMailAttachment |
设置附件的存储路径 ,即 $file_path |
- |
| saveToDisk() |
PhpImap\IncomingMailAttachment |
根据 $file_path 将附件存储到磁盘 ,成功返回 true |
- |
2.4 邮箱信息相关的成员
| 成员 |
所属类 |
说明 |
示例 |
| getListingFolders($pattern = '*') |
PhpImap\Mailbox |
返回邮箱中列出的文件夹列表 |
- |
| countMails() |
PhpImap\Mailbox |
获取邮箱中邮件的数量 |
- |
| getMailboxes($search = '*') |
PhpImap\Mailbox |
返回邮箱中所有的文件夹列表 |
- |
| checkMailbox() |
PhpImap\Mailbox |
返回当前邮箱相关的信息 |
- |
2.5 设置邮件的成员
| 成员 |
所属类 |
说明 |
示例 |
| deleteMail($mailId) |
PhpImap\Mailbox |
根据 $mailId 删除邮件 |
- |
setFlag(array flag) |
PhpImap\Mailbox |
设置一组邮件的标记 ,可用的值有 RFC2060 规定的 \Seen 、\Answered 、\Flagged 、 \Deleted 、\Draft |
- |
clearFlag(array flag) |
PhpImap\Mailbox |
删除一组邮件的标记 ,可用的值有 RFC2060 规定的 \Seen 、\Answered 、\Flagged 、 \Deleted 、\Draft |
- |
| markMailsAsImportant(array $mailId) |
PhpImap\Mailbox |
将邮件标记为 \Flagged |
- |
| markMailAsRead($mailId) |
PhpImap\Mailbox |
将邮件标记为 \Seen |
- |
| markMailsAsRead(array $mailId) |
PhpImap\Mailbox |
将一组邮件标记为 \Seen |
- |
| markMailAsUnread($mailId) |
PhpImap\Mailbox |
删除邮件的标记 \Seen |
- |
| markMailsAsUnread(array $mailId) |
PhpImap\Mailbox |
删除一组邮件的标记 \Seen |
- |
2.6 连接相关的成员
| 成员 |
所属类 |
说明 |
示例 |
| disconnect() |
PhpImap\Mailbox |
与 IMAP 服务器断开连接 |
- |
| getLogin() |
PhpImap\Mailbox |
返回 IMAP 登录信息 ,通常是邮件地址 |
cangsongbayu@163.com |
| getImapPath() |
PhpImap\Mailbox |
返回 IMAP 路径 |
{imap.163.com:143} |
2.7 其他配置相关的成员
| 成员 |
所属类 |
说明 |
示例 |
| setServerEncoding($serverEncoding) |
PhpImap\Mailbox |
设置服务器使用的编码 |
- |
| getServerEncoding() |
PhpImap\Mailbox |
返回当前设置的服务器编码 |
- |
3. IncomingMailHeader
getMailHeader() 方法会返回邮件的 IncomingMailHeader 实例 ,下面看可以从 IncomingMailHeader 中提取到哪些信息
| 属性 |
说明 |
示例 |
| id |
邮件的 id |
1524851188 |
| date |
邮件的发送时间 |
2020-01-07T02:04:27+08:00 |
| headersRaw |
邮件的原数据 |
- |
| headers |
邮件原数据中提取出的数据 |
- |
| subject |
邮件的主题 |
- |
| fromHost |
发件人 host |
qq.com |
| fromName |
发件人名称 |
- |
| fromAddress |
发件人邮箱 |
cangsongbayu@qq.com |
| senderHost |
收件人 host |
163.com |
| senderName |
收件人名称 |
- |
| senderAddress |
收件人邮箱 |
cangsongbayu@163.com |
| to |
收件人数组 |
[to] => Array([cangsongbayu@163.com] => cangsongbayu) |
| cc |
抄送人数组 |
[cc] => Array([cangsongbayu@163.com] => cangsongbayu) |
| bcc |
密送人数组 |
[bcc] => Array() |
| replyTo |
回复人数组 |
[replyTo] => Array([1228950011@qq.com] => cangsongbayu) |
| headers->date |
邮件的发送时间 |
Tue, 7 Jan 2020 02:42:27 +0800 |
| headers->subject |
邮件的主题 ,可能未解码 |
=?gb18030?B?suLK1MPXy8mzrcvN?= |
| headers->toaddress |
收件人名称 ,可能未解码 |
=?gb18030?B?Y2FuZ3NvbmdiYXl1?= |
| headers->to |
收件人数组 ,数组中每一项都是 stdClass ,分别有 personal 、mailbox 、host 三个属性 |
Array ( [0] => stdClass Object ( [personal] => =?gb18030?B?Y2FuZ3NvbmdiYXl1?= [mailbox] => cangsongbayu [host] => 163.com ) ) |
| headers->fromaddress |
发件人名称 ,可能未解码 |
?gb18030?B?stTLybDO0+o=?= 1228950011@qq.com
|
| headers->from |
发件人数组 ,数组中每一项都是 stdClass ,分别有 personal 、mailbox 、host 三个属性 |
Array ( [0] => stdClass Object ( [personal] => =?gb18030?B?stTLybDO0+o=?= [mailbox] => 1228950011 [host] => qq.com ) ) |
| headers->ccaddress |
抄送人名称 ,可能是未解码 |
?gb18030?B?Y2FuZ3NvbmdiYXl1?= |
| headers->cc |
抄送人数组 , 数组中每一项都是 stdClass ,分别有 personal 、mailbox 、host 三个属性 |
Array ( [0] => stdClass Object ( [personal] => =?gb18030?B?Y2FuZ3NvbmdiYXl1?= [mailbox] => cangsongbayu [host] => 163.com ) ) |
| headers->reply_toaddress |
回复人名称 ,可能未解码 |
?gb18030?B?stTLybDO0+o=?= 1228950011@qq.com
|
| headers->reply_to |
回复人数组 , 数组中每一项都是 stdClass ,分别有 personal 、mailbox 、host 三个属性 |
Array ( [0] => stdClass Object ( [personal] => =?gb18030?B?stTLybDO0+o=?= [mailbox] => 1228950011 [host] => qq.com ) ) |
| headers->senderaddress |
发件人名称 ,可能未解码 |
?gb18030?B?stTLybDO0+o=?= 1228950011@qq.com
|
| headers->sender |
发件人数组 , 数组中每一项都是 stdClass ,分别有 personal 、mailbox 、host 三个属性 |
Array ( [0] => stdClass Object ( [personal] => =?gb18030?B?stTLybDO0+o=?= [mailbox] => 1228950011 [host] => qq.com ) ) |
4. 返回值一览
4.1 PhpImap\Mailbox 的 checkMailbox() 的返回值
返回一个 stdClass
stdClass Object
(
[Date] => Mon, 6 Jan 2020 06:45:48 +0800
[Driver] => imap
[Mailbox] => {imap.163.com:143/imap/tls/user="cangsongbayu@163.com"}INBOX
[Nmsgs] => 2
[Recent] => 2
)
4.2 PhpImap\Mailbox 的 getMailsInfo(array $mailsIds) 的返回值
返回的数组中每一项都是 stdClass ,包含了对应邮件的一些描述信息
Array
(
[0] => stdClass Object
(
[subject] => test
[from] => 苍松 拔雨
[to] => "cangsongbayu@163.com"
[date] => Sun, 5 Jan 2020 22:39:23 +0000
[message_id] =>
[size] => 7364
[uid] => 1524851185
[msgno] => 1
[recent] => 0
[flagged] => 0
[answered] => 0
[deleted] => 0
[seen] => 0
[draft] => 0
[udate] => 1578263965
)
[1] => stdClass Object
(
[subject] => test subject
[from] => " 苍松拔雨 " <1228950011@qq.com>
[to] => " cangsongbayu "
[date] => Mon, 6 Jan 2020 06:41:46 +0800
[message_id] =>
[size] => 2324
[uid] => 1524851186
[msgno] => 2
[recent] => 0
[flagged] => 0
[answered] => 0
[deleted] => 0
[seen] => 0
[draft] => 0
[udate] => 1578264108
)
)
| 成员 |
说明 |
示例 |
| subject |
邮件主题 |
- |
| from |
发件人名称 |
- |
| sender |
发件人邮箱 ,不一定有 |
- |
| to |
收件人 ,不一定是邮箱地址 |
- |
| date |
发送时间 |
Mon, 6 Jan 2020 06:41:46 +0800 |
| size |
邮件的字节大小 |
- |
| uid |
邮箱中邮件的 uid |
- |
| msgno |
邮箱中的邮件序列号 |
- |
| recent |
表示邮件是否被标记为 \Recent |
- |
| flagged |
表示邮件是否被标记为 \Flagged |
- |
| answered |
表示邮件是否被标记为 \Answered |
- |
| deleted |
表示邮件是否被标记为 \Deleted |
- |
| seen |
表示邮件是否被标记为 \Seen |
- |
| draft |
表示邮件是否被标记为 \Draft |
- |
| udate |
Unix 时间戳格式的 date |
- |
4.3 PhpImap\Mailbox 的 getListingFolders($pattern = '*') 的返回值
返回邮箱中列出的文件夹列表
Array
(
[0] => {imap.163.com:143}INBOX
[1] => {imap.163.com:143}草稿箱
[2] => {imap.163.com:143}已发送
[3] => {imap.163.com:143}已删除
[4] => {imap.163.com:143}垃圾邮件
[5] => {imap.163.com:143}病毒文件夹
)
4.4 PhpImap\Mailbox 的 getMailboxes() 的返回值
返回邮箱中所有的文件夹列表
Array
(
[0] => Array
(
[fullpath] => {imap.163.com:143}INBOX
[attributes] => 0
[delimiter] => /
[shortpath] => INBOX
)
[1] => Array
(
[fullpath] => {imap.163.com:143}草稿箱
[attributes] => 0
[delimiter] => /
[shortpath] => 草稿箱
)
[2] => Array
(
[fullpath] => {imap.163.com:143}已发送
[attributes] => 0
[delimiter] => /
[shortpath] => 已发送
)
[3] => Array
(
[fullpath] => {imap.163.com:143}已删除
[attributes] => 0
[delimiter] => /
[shortpath] => 已删除
)
[4] => Array
(
[fullpath] => {imap.163.com:143}垃圾邮件
[attributes] => 0
[delimiter] => /
[shortpath] => 垃圾邮件
)
[5] => Array
(
[fullpath] => {imap.163.com:143}病毒文件夹
[attributes] => 0
[delimiter] => /
[shortpath] => 病毒文件夹
)
)
5. 参数补充说明
5.1 PhpImap\Mailbox 的 setFlag(array
flag) 参数说明
| 参数 |
说明 |
示例 |
| $mailsIds |
邮件的 $mailId 组成的数组 |
- |
| $flag |
可用的值有 RFC2060 规定的 \Seen 、\Answered 、\Flagged 、 \Deleted 、\Draft |
- |
| 标记 |
说明 |
示例 |
| \Seen |
将邮件标记为已读 |
mailsIds, '\Seen') |
| \Deleted |
将邮件标记为已删除 |
mailsIds, '\Deleted') |
| \Draft |
将邮件标记为草案 |
mailsIds, '\Draft') |
| \Flagged |
将邮件标记为重要邮件 |
mailsIds, '\Flagged') |
网友评论