簡體   English   中英

提取PHP IMAP附件

[英]Extracting PHP IMAP attachments

您好,我有一個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); 我的語法有問題嗎?

謝謝,

我找到了答案:

替換以下行:

   $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 />';
  }

謝謝,

在這里,您將通過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和純文本的電子郵件並帶有附件,則這很常見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM