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";
}
}
}
}
(未经测试,但应该做正确的事情…) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
