composer require php-imap/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 |
返回當前設定的伺服器編碼 |
- |
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.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
)
成員 |
說明 |
示例 |
---|
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.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 協議》,轉載必須註明作者和本文連結