文字

mailparse_msg_extract_part

(PECL mailparse >= 0.9.0)

mailparse_msg_extract_part Extracts/decodes a message section

说明

void mailparse_msg_extract_part ( resource $mimemail , string $msgbody [, callable $callbackfunc ] )
Warning

本函数还未编写文档,仅有参数列表。

参数

mimemail

A valid MIME resource.

msgbody

callbackfunc

返回值

没有返回值。

参见

  • mailparse_msg_extract_part_file() - Extracts/decodes a message section
  • mailparse_msg_extract_whole_part_file() - Extracts a message section including headers without decoding the transfer encoding

用户评论:

[#1] marlinf {at} datashaman {dot} com [2008-01-11 02:13:50]

With ref to previous comment re: callback:

If you explicitly specify NULL as the callback parameter, the complete section is extracted, decoded and returned, without the need for a callback.

[#2] Will [2007-01-04 00:12:56]

In mailparse version 2.1.1 (and perhaps earlier), when using mailparse_msg_extract_part() with a callback function, it breaks the data it passes to it into 4kB chunks and calls the callback function for each chunk.  So, for example, if it's extracting a 41kB MIME part, the callback function you define will be called 11 times, each time with the next chunk of data.  Here's some quick-and-dirty code that shows one way to handle this:

<?php
    $message 
file_get_contents ("email.txt"); // Pull in the e-mail.

    
function catch_part ($part)
    {
        
$GLOBALS["part_data"] .= $part// Append the data onto any previously extracted data.
    
}

    
mailparse_msg_extract_part ("1.1"$message"catch_part"); // Extract MIME part 1.1
    
echo $GLOBALS["part_data"]; // Print out the extracted part.
?>


There's probably a much better way of dealing with this, but hey.  It's what I got.

[#3] php at cdauth dot de [2006-06-07 00:01:37]

substr() uses the string length, not the position as third argument. The corrected version of the following code line:
<?php
$parts
[$s] = substr($file_txt$starting_pos_body$ending_pos_body-$starting_pos_body);
?>

[#4] steve at tequilasolutions dot com [2006-04-06 10:36:14]

Unless I've missed something obvious:

get_structure returns array(1,1.1,1.1.2) etc but its not easy to get the contents of each part as mailparse_msg_extract_part() and mailparse_msg_extract_part_file() just return the lot.  However get_part_data will return the string offsets so you know where to chop the message so you can get the contents of the parts.

Only issue is get_part_data returns:
    [starting-pos] => 0
    [starting-pos-body] => 1412
    [ending-pos] => 14989
    [ending-pos-body] => 14989

Unless I'm missed something else, theres a bug here as ending-pos is the same as ending-pos-body so it won't chop the contents cleanly, leaving the:

------=_NextPart_000_0069_01C659A6.9072E590--

...as supposedly part of the section contents.

$file = "..../mail"; // path of your mail
$file_txt = implode("",file($file));
$parse = mailparse_msg_parse_file($file); 
$structure = mailparse_msg_get_structure($parse);
// chop message parts into array
$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); // copy data into array
print "[".$parts[$s]."]";
print "\n------------------------------------\n";
}

上一篇: 下一篇: