php - 获取 PHP 的 imap_fetchbody 正确的部分编号/索引正文部分列表

标签 php imap email-attachments

我很难确定如何始终如一地引用零件编号(诸如 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');

if ($mbox) { $structure = imap_fetchstructure($mbox,$message_id);

$i = 0; $j = 0;

foreach ($structure->parts as $k1 => $d1) {//Next line, how do we refer to the part correct, e.g. "'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/

相关文章:

php - 在 php 中用正则表达式替换短代码

php - 从字符串中删除所有反斜杠 - php - regex

azure - SendGrid:如何从 Azure Blob 存储附加文件?

python-3.x - 如何使用 python IMAP 下载邮件的所有附件

PHP file_exists() 异常

php - "Could not open input file: bin/console"尝试运行 Symfony 应用程序时出现错误

PHP IMAP 检索 To 地址中的所有收件人

python - 从电子邮件中提取文本后,空格替换为 =20

Javamail下载base64附件

php - 在电子邮件正文中嵌入 base64 图像