1. 相关资料
php-imap 用于获取邮件 ,但是没有详细的官方文档 ,在这里整理一份分享给大家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($criteria = 'ALL', $disableServerEncoding = false)
PhpImap\Mailbox
根据 $criteria 获取邮箱中的邮件列表 ,可用的 $criteria 参数参见 https://www.php.net/imap_search
-
getMail($mailId, $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($msgId, $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 $mailsIds, $flag)
PhpImap\Mailbox
设置一组邮件的标记 ,可用的值有 RFC2060 规定的 \Seen 、\Answered 、\Flagged 、 \Deleted 、\Draft
-
clearFlag(array $mailsIds, $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() 的返回值
返回一个 stdClassstdClass 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
)成员
说明
示例Date
根据 RFC2822 格式化的当前系统时间
Mon, 6 Jan 2020 05:46:26 +0800
Dirver
访问此邮箱使用的协议
POP3 、IMAP 、NNTP
MailBox
邮箱名称
{imap.163.com:143/imap/tls/user="cangsongbayu@163.com"}INBOX
Nmsgs
邮箱中的邮件数量
1
Recent
邮箱中最近的邮件数量
0
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 $mailsIds, $flag) 参数说明参数
说明
示例$mailsIds
邮件的 $mailId 组成的数组
-
$flag
可用的值有 RFC2060 规定的 \Seen 、\Answered 、\Flagged 、 \Deleted 、\Draft
-标记
说明
示例\Seen
将邮件标记为已读
$mailBox->setFlag($mailsIds, '\Seen')
\Deleted
将邮件标记为已删除
$mailBox->setFlag($mailsIds, '\Deleted')
\Draft
将邮件标记为草案
$mailBox->setFlag($mailsIds, '\Draft')
\Flagged
将邮件标记为重要邮件
$mailBox->setFlag($mailsIds, '\Flagged')有错误的地方欢迎指出 ,或者补充也可以 ,感谢每个对我提出建议的人本作品采用《CC 协议》,转载必须注明作者和本文链接