[英]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.