【问题标题】:Extracting PHP IMAP attachments提取 PHP IMAP 附件
【发布时间】:2012-08-02 07:50:02
【问题描述】:

您好,我有一个 PHP IMAP 函数,可以提取电子邮件特定正文的附件,我发现这篇文章:http://www.linuxscope.net/articles/mailAttachmentsPHP.html 但它显示错误:警告:imap_bodystruct() [function.imap-bodystruct]:错误的消息号我不知道我错过了什么。这是我的代码

session_start();

include('settings.php');

include('vars.php');

$struct = imap_fetchstructure($mbox,$getmsgid, FT_UID);

$contentParts = count($struct->parts);

if ( $contentParts >= 2 ) {

    for ( $ii=2; $ii<=$contentParts; $ii++ ) {

        $att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii);

        echo $ii . '<br />';
    }

for ($k=0;$k<sizeof($att);$k++) {

    if ($att[$k]->parameters[0]->value == "us-ascii" || $att[$k]->parameters[0]->value  == "US-ASCII") {

        if ($att[$k]->parameters[1]->value != "") {

            $selectBoxDisplay[$k] = $att[$k]->parameters[1]->value;

        }

    }elseif ($att[$k]->parameters[0]->value != "iso-8859-1" && $att[$k]->parameters[0]->value != "ISO-8859-1") {

        $selectBoxDisplay[$k] = $att[$k]->parameters[0]->value;

        }
    }

   }

   if (sizeof($selectBoxDisplay) > 0) {

echo "<select name=\"attachments\" size=\"3\" class=\"tblContent\"    onChange=\"handleFile(this.value)\" style=\"width:170;\">";

    for ($j=0;$j<sizeof($selectBoxDisplay);$j++) {

        echo "\n<option value=\"$j\">". $selectBoxDisplay[$j]    ."</option>";

    }

echo "</select>";

  }

settings.php 包含我的 $mbox 连接,它工作正常,这里唯一的问题是 imap_bodystruct($mbox,$getmsgid, $ii);我的语法有什么问题吗?

谢谢你,

【问题讨论】:

    标签: php imap


    【解决方案1】:

    我找到了答案:

    替换行:

       $att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii);
    

    到:

       $att[$ii-2] = imap_bodystruct($mbox, imap_msgno($mbox, $getmsgid), $ii);
    

    这里显示附件,替换这一行:

      if (sizeof($selectBoxDisplay) > 0) {
    
      echo "<select name=\"attachments\" size=\"3\" class=\"tblContent\"    onChange=\"handleFile(this.value)\" style=\"width:170;\">";
    
       for ($j=0;$j<sizeof($selectBoxDisplay);$j++) {
    
        echo "\n<option value=\"$j\">". $selectBoxDisplay[$j]    ."</option>";
    
       }
    
       echo "</select>";
    
      }
    

    到:

      foreach($selectBoxDisplay as $attachments => $attVal){
         echo $attVal . '<br />';
      }
    

    谢谢,

    【讨论】:

      【解决方案2】:

      在这里,您按 UID 获取消息。

      $struct = imap_fetchstructure($mbox,$getmsgid, FT_UID);
      

      大概当你获取身体部位时,你也需要通过 UID 来做:

      $att[$ii-2] = imap_fetchbody ($mbox, $getmsgid, $ii, FT_UID)
      

      这应该通过 UID 和部件号获取正文部分。

      您现有的调用$att[$ii-2] = imap_bodystruct($mbox,$getmsgid, $ii); 将尝试按消息序列号获取消息,该序列号与 UID 不同。这个函数(我不清楚它的作用)似乎没有通过 UID 获取的选项。

      另外请记住,对于非常复杂的 MIME 消息,部分不一定是连续的(例如:1、2、3);它们可以有子部分:1.1、1.2、2、3。如果您有一封包含 HTML 和纯文本的电子邮件,并且有附件,这很常见。

      【讨论】:

      • 感谢您的回复,但仍然遇到同样的错误。我的电子邮件中有 8 个附件,而我得到的是 8 个重复错误。我不知道这里到底缺少什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2012-07-02
      • 2013-02-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多