1

IMAP に少し問題があります。基本的に、サーバーに接続してフォルダー名を取得し、フォルダーごとに再接続し、各メッセージをループして、必要なことを実行しています。

物事が次第に遅くなるという事実を除いて、それは機能しています。これで何かアイデアはありますか?問題を引き起こしているのはこのビットにあるように思われるので、imap_body に関係しているというおかしな感じがあります。どういうわけかループごとにこれをクリアする必要がありますか?

私のコードはこれに似ています(ただし、ビットの負荷が削除されています)...

    $Mailbox = imap_open("$Hostname", "$Username", "$Password") or die('Error: ' . imap_last_error());
    $List = imap_list($Mailbox, "$Hostname", "*");

    if(is_array($List))
    {
            foreach ($List as $Folder)
            {
                    $FolderName = imap_utf7_decode($Folder);
                    $FolderStream = imap_reopen($Mailbox, "$Folder") or die('Error: ' . imap_last_error());
                    $FolderCount = imap_num_msg($Mailbox);
                    for($i=1;$i<=$FolderCount;$i++)
                    {
                            $EmailBody = imap_body($Mailbox, $i);
                            // Do whatever I need here
                    }
            }
    }
    imap_close($Mailbox);

更新 ホスト名ではなくサーバーのIPアドレスを使用して少し速度を上げました(これはポートの指定に加えてです)が、進行するにつれて物事が遅くなるという問題は依然として残っています.

4

2 に答える 2

1

これは、ネットワークと、接続している IMAP サーバーがクライアントの要求に応える能力にのみ依存します。imap_body は実際にメール本文をフェッチしており、メール サイズは数キロバイトから 20 ~ 25 メガバイトまでさまざまです。

クライアント側からできることはほとんどありません。

データ転送が高すぎる場合、サーバーは接続を調整しようとすることがあります。その場合は、接続を再接続して、前の状態から続行できます。

IP に更新してもあまり効果はありませんが、代わりにホスト名のみを使用することをお勧めします。

于 2013-02-20T04:24:20.260 に答える
1

20/25 メールごとに、または 50/100 MB のデータがダウンロードされたときに、メール サーバーに再接続してみてください。この時点以降、IMAP サーバーの速度が低下するのを見てきました...

于 2013-02-20T05:01:00.943 に答える