PHP Conference Japan 2024

imap_mail_move

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mail_move將指定的郵件移至信箱

說明

imap_mail_move(
    IMAP\Connection $imap,
    字串 $message_nums,
    字串 $mailbox,
    整數 $flags = 0
): 布林值

message_nums 指定的郵件移至指定的 mailbox。請注意,郵件實際上是*複製*到 mailbox,原始郵件則會標記為刪除。這表示 mailbox 中的郵件會被分配新的 UID。

參數

imap

一個 IMAP\Connection 實例。

message_nums

message_nums 參數不僅僅是訊息編號(如 » RFC2060 中所述)而是一個範圍。

mailbox

信箱名稱,詳情請參閱 imap_open()

警告

除非停用 imap.enable_insecure_rsh,否則將不受信任的資料傳遞給此參數是*不安全的*。

flags

flags 是一個位元遮罩,可以包含單個選項

  • CP_UID - 序列號包含 UID

返回值

成功時返回 true,失敗時返回 false

更新日誌

版本 說明
8.1.0 imap 參數現在需要一個 IMAP\Connection 實例;以前需要一個有效的 imap 資源

注意事項

注意:

imap_mail_move() 會將原始郵件標記為刪除標記,要成功刪除它,必須呼叫 imap_expunge() 函式。

另請參閱

新增筆記

使用者提供的筆記 3 則筆記

8
FredN
4 年前
要正確取得 imap_mail_move/imap_mail_copy 的資料夾名稱,不要猜測,請使用 imap_list。
8
alex at bestgames dot ro
19 年前
使用 imap_mail_move、imap_mail_copy 或 imap_delete 後,必須呼叫 imap_expunge() 函式。
1
jab_creations at yahoo dot com
1 天前
imap_mail_move() 函式的第二個參數(message_nums 參數)接受兩個有效值

個別訊息編號
47



陣列
47,58,112

請記住以下四個關鍵事項!

1. 這個移動函式實際上並沒有移動任何東西,它在內部建立一個副本,然後刪除原始郵件!

2. 您應該在內部追蹤 Message-Id 標頭(應該設定!)以確認唯一的 IMAP ID。

3. 因為當訊息被偽「移動」時,原始訊息和唯一的 IMAP ID 就會遺失!這表示在內部副本(或者對我們來說,已經被移動)建立之後,您必須建立與第二個信箱資料夾的新連線,列出或搜尋並透過內部訊息識別碼進行驗證,以保持您的郵件程式與外部伺服器同步。這反過來又意味著...

4. 您必須在第一個信箱資料夾中的已複製訊息被刪除後追蹤它。這為您提供了兩種邏輯方法可以使用

4.1 個別移動訊息,然後取得目的地資料夾的索引(例如,從收件匣移到垃圾桶),使用這個指令「移動」訊息,取得垃圾桶郵件資料夾的索引,並比較陣列以找出不同的郵件。

4.2 但實際上我們一次會移動多封郵件,所以你可以針對每個訊息掃描郵件資料夾,然而這假設標頭(例如 Message-Id)存在。

搜尋範例
$result = imap_search($mail_connection_folder_trash, "TEXT \"<24322757.12578452.2416351620568@domain.tld>\"", SE_UID);

以我處理數千封電子郵件的有限經驗來看,只有垃圾郵件發送者或薪資低得離譜的開發人員才不會設定 Message-Id。然而,你不能假設缺少標頭就代表是垃圾郵件,因為我原本的系統就從未設定它。因此,在非常見的情況下,使用次要或第三種方式搜尋不同的郵件可能是有必要的。這種情況可能會在數千封郵件中出現一次。

希望這個邏輯可以為一些人省下構思的時間。
To Top