我在尝试确定如何一致地引用零件编号时遇到困难(零件编号,例如2.0、2.1、2.2等将仅引用纯文本/文本消息,图像/ jpeg等的数据)。下面,我正在使用'1.'.$i
和'2.'.$j
尝试引用给定消息中的对象。我觉得我很接近,尽管缺少一些东西...
$ mbox =
imap_open('{mail.example.com:143/novalidate-cert}INBOX','someone+example.com','password');
如果($ mbox){$ structure = imap_fetchstructure($ mbox,$ message_id);
$ i = 0; $ j = 0;
foreach($ structure-> parts as $ k1 => $ d1){//下一行,我们如何
参考正确的部分,例如“'1。'。$ i”?
if (isset($d1->parts))
{
foreach ($d1->parts as $j2 => $d2)
{//Next line, how do we refer to the part correct, e.g. "'2.'.$j"?
$a = print_r(imap_fetchbody($mbox,$cms->page2,'2.'.$j),1);
echo '<div><img alt="" src="data:image/jpeg;base64,'.$a.'" /></div>';
}}}}
另外,我对使用任何框架都不感兴趣,我想自己弄清楚如何做到这一点。当要求相关说明时,我很乐意完善我的问题。
最佳答案
在将电子邮件迁移到数据库之前,我将所有内容附加到$email
数组。
这是对电子邮件各个部分进行迭代的方式。尽管可以正常工作,但这里可能不再使用一些较旧的位。在将不同的部分写入数据库之前,我经常使用它们来准备这些部分。
$message = imap_body($mbox,$i);
$structure = imap_fetchstructure($mbox,$i);
$f = array('!');
$r = array('');
$message = str_ireplace($f,$r,$message);
$find = array('=00');
$replace = array('');
$message = str_ireplace($find,$replace,$message);
$message = mb_convert_encoding($message,'us-ascii','UTF-8');
$message = utf8_encode($message);
$dontattach = array('alternative','html','plain','related');
$ii = 1;
$j = 1;
$k = 1;
$fallback = 0;
if (isset($structure->parts))
{
foreach ($structure->parts as $k1 => $d1)
{
if ($d1->subtype=='GIF')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d1->id)) {$id = $d1->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d1->parameters[0]->value,'image/gif',$id);
array_push($email['attachments'],$a);
}
else if ($d1->subtype=='HTML')
{
$a = mail_service_html($mbox,$i,$d1->encoding,$d1->parameters[0]->value,$ii,$j);
if (isset($a['css'])) {$email['css'] = $a['css'];}
$email['body_xml'] = $a['xml'];
$fallback++;
}
else if ($d1->subtype=='JPEG')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d1->id)) {$id = $d1->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d1->parameters[0]->value,'image/jpeg',$id);
array_push($email['attachments'],$a);
}
else if ($d1->subtype=='PLAIN')
{
$a = mail_service_plain($mbox,$i,$d1->encoding,$d1->parameters[0]->value,$ii,$j,$k);
$email['body_clean'] = $a['xml'];
$email['body_text'] = $a['plain'];
$fallback++;
}
else if ($d1->subtype=='PNG')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d1->id)) {$id = $d1->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d1->parameters[0]->value,'image/png',$id);
array_push($email['attachments'],$a);
}
else if (!in_array(strtolower($d1->subtype),$dontattach))
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d1->id)) {$id = $d1->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d1->parameters[0]->value,strtolower($d1->subtype),$id);
array_push($email['attachments'],$a);
}
if (isset($d1->parts))
{
foreach ($d1->parts as $j2 => $d2)
{
if ($d2->subtype=='GIF')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d2->id)) {$id = $d2->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d2->parameters[0]->value,'image/gif',$id);
array_push($email['attachments'],$a);
}
else if ($d2->subtype=='HTML')
{
$a = mail_service_html($mbox,$i,$d2->encoding,$d2->parameters[0]->value,$ii,$j);
if (isset($a['css'])) {$email['css'] = $a['css'];}
$email['body_xml'] = $a['xml'];
$fallback++;
}
else if ($d2->subtype=='JPEG')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d2->id)) {$id = $d2->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d2->parameters[0]->value,'image/jpeg',$id);
array_push($email['attachments'],$a);
}
else if ($d2->subtype=='PLAIN')
{
$a = mail_service_plain($mbox,$i,$d2->encoding,$d2->parameters[0]->value,$ii,$j,$k);
$email['body_clean'] = $a['xml'];
$email['body_text'] = $a['plain'];
$fallback++;
}
else if ($d2->subtype=='PNG')
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d2->id)) {$id = $d2->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d2->parameters[0]->value,'image/png',$id);
array_push($email['attachments'],$a);
}
else if (!in_array(strtolower($d2->subtype),$dontattach))
{
if (!isset($email['attachments'])) {$email['attachments'] = array();}
if (isset($d2->id)) {$id = $d2->id;} else {$id = '';}
$a = mail_service_attachment($mbox,$i,$ii,$j,$d2->parameters[0]->value,strtolower($d2->subtype),$id);
array_push($email['attachments'],$a);
}
$j++;
$k = 1;
}
}
$ii++;
$j = 1;
$k = 1;
}
}
关于php - 获取PHP imap_fetchbody正确的零件号/索引主体零件列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17386365/