0

こんにちは、メールの特定の本文の添付ファイルを抽出する 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); です。私の構文に問題はありますか?

ありがとうございます、

4

2 に答える 2

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

ありがとう、

于 2012-08-07T08:37:11.063 に答える
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 とプレーン テキストの両方を含む電子メールがあり、添付ファイルがある場合に一般的です。

于 2012-08-02T13:41:26.500 に答える