除非我遺漏了一些明顯的東西
get_structure 會返回陣列 (1, 1.1, 1.1.2) 等等,但要取得每個部分的內容並不容易,因為 mailparse_msg_extract_part() 和 mailparse_msg_extract_part_file() 只會返回整個內容。然而,get_part_data 會返回字串偏移量,以便您知道在哪裡切割訊息,從而取得各個部分的內容。
唯一的問題是 get_part_data 返回
[起始位置] => 0
[起始位置-主體] => 1412
[結束位置] => 14989
[結束位置-主體] => 14989
除非我又遺漏了什麼,這裡有個錯誤,因為結束位置與結束位置-主體相同,所以它不會乾淨地切割內容,留下
------=_NextPart_000_0069_01C659A6.9072E590--
...作為區段內容的一部分。
$file = "..../mail"; // 您的郵件路徑
$file_txt = implode("",file($file));
$parse = mailparse_msg_parse_file($file); // 解析郵件檔案
$structure = mailparse_msg_get_structure($parse); // 取得郵件結構
// 將郵件片段分割成陣列
$parts = array(); // 初始化陣列
foreach ($structure as $s){ // 迴圈處理每個郵件片段
print "片段 $s\n";
print "--------------------------------------\n";
$part = mailparse_msg_get_part($parse, $s); // 取得郵件片段
$part_data = mailparse_msg_get_part_data($part); // 取得片段資料
print_r($part_data); // 顯示片段資料
$starting_pos_body = $part_data['starting-pos-body']; // 郵件本文起始位置
$ending_pos_body = $part_data['ending-pos-body']; // 郵件本文結束位置
$parts[$s] = substr($file_txt,$starting_pos_body,$ending_pos_body); // 將資料複製到陣列
print "[".$parts[$s]."]"; // 顯示片段內容
print "\n------------------------------------\n";
}