【发布时间】:2012-07-02 09:08:21
【问题描述】:
如何从这封电子邮件中获取附件?
这封邮件是从苹果电脑发出的,邮件结构和其他的都不一样(惊喜)..这里的处置部分比其他部分更深一维..
该脚本适用于包含文件的部分位于第一维中的所有其他电子邮件,但不适用于这个
$part->dparameters[0]->value返回文件名,但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
)
)
)
)
)
)
【问题讨论】:
-
我不明白FROM Mac 发送的电子邮件与其他任何电子邮件有何不同。您是否将电子邮件标题与从其他类型帐户发送的电子邮件进行了比较,以了解它们的确切差异?除非“发件人”是指它存储在 Mac 上的电子邮件服务器上。
-
主体结构与其他结构不同..带有文件的部分在结构中比其他部分更深一维
-
我说的是邮件标题。查看电子邮件的源代码并比较它们,看看有什么不同。比较他们每个人发送附件的方式,这可能会让您了解发生了什么。
-
我将 $part->dparameters[0]->value 更改为 foreach 循环,因为有时 Content-Disposition 不仅包含文件名,还包含其他参数(例如,创建日期)可以在数组中排在第一位。要获取文件名,您应该搜索它: foreach($part->dparameters as $dp) { if (strcasecmp($dp->attribute, 'filename')==0) $filename=$dp->value; }
-
@Mike 问题不在于它是从 Mac 发送的,而在于它是通过“mac mailer”发送的。如果你在 Mac 上使用 Thunderbird,没问题。
标签: php imap apple-mail