2012-08-02 86 views
0

你好我有一個PHP IMAP函數,它提取了電子郵件的特定主體的附件,我發現這篇文章:http://www.linuxscope.net/articles/mailAttachmentsPHP.html但它顯示一個錯誤:Warning:imap_bodystruct()[function.imap-bodystruct ]:錯誤的消息號碼我不知道我錯過了什麼。這裏是我的代碼提取PHP IMAP附件

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,$二);那裏有我的語法有問題嗎?

謝謝你,

回答

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

感謝,

0

在這裏你通過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和純文本電子郵件,並有一個附件,這是很常見的。

+0

謝謝您的回覆,但仍然得到了同樣的錯誤。我的電子郵件中有8個附件,我得到的是8個重複錯誤。我不知道這裏到底發生了什麼。 – leojarina 2012-08-03 08:52:27