除非我错过了什么显而易见的东西
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 "部分 $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";
}