PHP-imap 使用參考手冊

cangsongbayu發表於2020-01-07

composer require php-imap/php-imap

名稱 地址
Packagist https://packagist.org/packages/php-imap/ph...

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 協議》,轉載必須註明作者和本文連結

相關文章