私の経験からすると、これはいくつかの役に立つ方法で動作するためには、まずWebメールプラットフォームの仕組みを調べる必要があります。電子メールがページ上で閲覧されるとき、プロバイダーはログイン時に電子メールサーバーからのすべての電子メールをページにプルしません。これが標準であった場合、サーバ/ディスクは常に負荷に苦しんでいます。クエリは制御され、通常画面上に一度に約50〜100件のアイテムが表示されます。一部のユーザーは、すべてのアイテムがOutlook Web Accessに表示されているように見えますが、実際にはユーザーがスクロールすると検索が開始されます。フェッチクエリの結果の量を制限する下のスクリプトでテストすることをお勧めします。それは同様の問題をテストするために作られたもので、テストには最適です。 $mailNumber
を画面(INT
)に印刷してテストしたいレコードの量に変更します。各電子メールを選択することができます。電子メールがHTMLで書かれていない限り、プレーンテキストを表示する必要があります。また、SSL検証も無効にしているため、接続時の応答時間が遅くなる可能性があります。コメントする
$imapServ = "imap.server.com";
$imapPort = "993";
$imapUser = "EMAIL";
$imapPass = "PASSWORD";
$mbox = imap_open("{" . $imapServ . ":" . $imapPort . "/imap/ssl/novalidate-cert}INBOX", $imapUser, $imapPass);
if (isset($_GET['email'])) {
$result = imap_fetchbody($mbox, $_GET['email'], 1);
echo "<p>$result</p>";
echo "<br>";
echo "<b><a href=\"" . $_SERVER['SCRIPT_NAME'] . "\">Back To List</a></b>";
} else {
$mc = imap_check($mbox); //Total count of mail in inbox
$mailNumber = $mc->Nmsgs/20; //Set Number for Email List Here
$result = imap_fetch_overview($mbox,"1:" . round($mailNumber) . "",0);
foreach ($result as $v) {
echo "<a href=\"" . $_SERVER['SCRIPT_NAME'] . "?email=" . $v->uid . "\"><b>From:</b>" . $v->from . " <b>Subject: </b>" . $v->subject . " <b>Date: </b>" . $v->date . "</a>";
echo "<br>";
}
}
応答:
これが唯一のGmailで起こる、と私はあなたが安定したインターネット接続を持って推測している、私は問題がダウンしてGmailに外部のIMAP接続の帯域幅を絞るが疑われると。これを証明するには、他のプロバイダでテストし、結果を調査します。ほとんどの人がGmailポータルを使用することを忘れないでください(間違いなくIMAPデータサーバに直接接続することは間違いありません)。IMAPデータをキャッシュするメールクライアントは、新しいメールをチェックインしてからメールをクライアントに保存するだけです。なぜこれらの症状は顕著ではないでしょうか。
IMAPデータを格納するDBソリューションを検討し、これをGmail IMAPサーバーと頻繁に比較することも検討する価値があります。この方法であなたの唯一のボトルネックはあなたのDBです。あなたはGoogleダイレクトでこれを上げる必要がありますが、彼らは無料サービスのために多くの援助を提供するのではないかと考えています。
最後の選択肢は、まったく別の解決策を使用することです。 GoogleはGmail APIを持っていますので、これが指定されたメールボックスからのデータをより速く引っ張っているかどうかを確認できます。
さらにコメント応答:
あなたが緩く述べてきたように、あなたはAPIやIMAPを使用するかどうか、あなたはあなたのコードの場合の速度に関しては実際のコントロールをオフにしていないプロトコルを介してサービスにアクセスします最適化されています。上記の例では、テスト用のJavascript/HTML bloatwareを削除しています。これは実際のスピードの向上はなく、ホストされているプラットフォーム上でIMAPが大幅に高速化されていることを確認したので、問題はGmailやISPにありますので、解決する可能性がある場合は直接連絡する必要があります。私はそれがあなたのISPだとはっきりとは思っていますが、もしあなたがGoogleでどこにいなくてもそれはまだポイントです。私はDNSの変更を提案しましたが、あなたがすでに解決策を望んでいること(特にIPによるテスト)に関連する変更をすでに行っていることがわかります。
このスクリプトは、一度に1つのメールを1つずつ取り込みます。一括フェッチははるかに高速です。 – Max
一括フェッチをどのように行うのですか? –
PHPライブラリはわかりませんが、一度に複数のメッセージを取得する必要があります。 IMAPプロトコルでは、これは 'A FETCH 1,2,3,4,5,6,7,8,9,23,45,28(UID FLAGS ....)'のようになります。要求されたメッセージはすべて同時に送信されます。マニュアルで「シーケンスセット」などを確認してください。この方法では、1回ではなく1回の往復で50メッセージを取得できます。 – Max