php – imap – 获取附件
发布时间:2020-12-13 14:01:15 所属栏目:PHP教程 来源:网络整理
导读:如何从此电子邮件中获取附件? 这个电子邮件是从一个苹果电脑发送的,而且电子邮件的结构并不像任何其他的(惊喜).这里配置的部分比其他的更深一些. 该脚本与每个其他电子邮件一起使用,其中文件的部分位于第一个维度,但不与此一个 $part- dparameters [0] –
如何从此电子邮件中获取附件?
这个电子邮件是从一个苹果电脑发送的,而且电子邮件的结构并不像任何其他的(惊喜).这里配置的部分比其他的更深一些. 该脚本与每个其他电子邮件一起使用,其中文件的部分位于第一个维度,但不与此一个 $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"; } } } } (未经测试,但应该做正确的事情…) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |