如何从此电子邮件中获取附件?
这个电子邮件是从一个苹果电脑发送的,而且电子邮件的结构并不像任何其他的(惊喜).这里配置的部分比其他的更深一些.
该脚本与每个其他电子邮件一起使用,其中文件的部分位于第一个维度,但不与此一个
$part-> dparameters [0] – >值返回文件名,但strlen($data)返回0
imap流
- $structure = imap_fetchstructure($this->stream,$this->msgno);
- if(isset($structure->parts)){
- print_r($structure->parts);
- $this->parse_parts($structure->parts);
- }
- function parse_parts($parts){
- foreach($parts as $section => $part){
- if(isset($part->parts)){
- // some mails have one extra dimension
- $this->parse_parts($part->parts);
- }
- elseif(isset($part->disposition)){
- if(in_array(strtolower($part->disposition),array('attachment','inline'))){
- $data = imap_fetchbody($this->stream,$this->msgno,$section+1);
- echo $part->dparameters[0]->value.' '.strlen($data)."\n";
- }
- }
- }
- }
的print_r
- Array
- (
- [0] => stdClass Object
- (
- [type] => 0
- [encoding] => 0
- [ifsubtype] => 1
- [subtype] => PLAIN
- [ifdescription] => 0
- [ifid] => 0
- [lines] => 15
- [bytes] => 173
- [ifdisposition] => 0
- [ifdparameters] => 0
- [ifparameters] => 1
- [parameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => CHARSET
- [value] => us-ascii
- )
- )
- )
- [1] => stdClass Object
- (
- [type] => 1
- [encoding] => 0
- [ifsubtype] => 1
- [subtype] => MIXED
- [ifdescription] => 0
- [ifid] => 0
- [bytes] => 23420
- [ifdisposition] => 0
- [ifdparameters] => 0
- [ifparameters] => 1
- [parameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => BOUNDARY
- [value] => Apple-Mail=_800896E0-A9C9-456E-B063-79CED9DD4FD7
- )
- )
- [parts] => Array
- (
- [0] => stdClass Object
- (
- [type] => 0
- [encoding] => 0
- [ifsubtype] => 1
- [subtype] => HTML
- [ifdescription] => 0
- [ifid] => 0
- [bytes] => 136
- [ifdisposition] => 0
- [ifdparameters] => 0
- [ifparameters] => 1
- [parameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => CHARSET
- [value] => us-ascii
- )
- )
- )
- [1] => stdClass Object
- (
- [type] => 3
- [encoding] => 3
- [ifsubtype] => 1
- [subtype] => PDF
- [ifdescription] => 0
- [ifid] => 0
- [bytes] => 17780
- [ifdisposition] => 1
- [disposition] => INLINE
- [ifdparameters] => 1
- [dparameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => FILENAME
- [value] => 057 - LPJ - Stik og labels.pdf
- )
- )
- [ifparameters] => 1
- [parameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => NAME
- [value] => 057 - LPJ - Stik og labels.pdf
- )
- )
- )
- [2] => stdClass Object
- (
- [type] => 0
- [encoding] => 4
- [ifsubtype] => 1
- [subtype] => HTML
- [ifdescription] => 0
- [ifid] => 0
- [lines] => 75
- [bytes] => 4931
- [ifdisposition] => 0
- [ifdparameters] => 0
- [ifparameters] => 1
- [parameters] => Array
- (
- [0] => stdClass Object
- (
- [attribute] => CHARSET
- [value] => us-ascii
- )
- )
- )
- )
- )
- )
您没有提供嵌套附件的正确部分号.您需要在递归步骤中传入节号.
- function parse_parts($parts,$parentsection = ""){
- foreach($parts as $subsection => $part){
- $section = $parentsection . ($subsection + 1);
- if(isset($part->parts)){
- // some mails have one extra dimension
- $this->parse_parts($part->parts,$section . "." );
- }
- elseif(isset($part->disposition)){
- if(in_array(strtolower($part->disposition),$section );
- echo 'Getting section ' . $section;
- echo $part->dparameters[0]->value.' '.strlen($data)."\n";
- }
- }
- }
- }
(未经测试,但应该做正确的事情…)