除非我遗漏了什么明显的东西
get_structure 返回数组 (1,1.1,1.1.2) 等,但要获取每个部分的内容并不容易,因为 mailparse_msg_extract_part() 和 mailparse_msg_extract_part_file() 只返回所有内容。但是 get_part_data 会返回字符串偏移量,所以你知道在哪里分割消息,这样你就可以获取部分的内容。
唯一的问题是 get_part_data 返回
[starting-pos] => 0
[starting-pos-body] => 1412
[ending-pos] => 14989
[ending-pos-body] => 14989
除非我漏掉了什么东西,否则这里有一个错误,因为 ending-pos 与 ending-pos-body 相同,所以它不会干净地分割内容,会留下
------=_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 "Part $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";
}