2016-12-11 13 views
3

私はDavid Walshのスクリプトを使用しています。このスクリプトはIMAP経由でGmailに接続し、電子メールデータを画面に出力します。 IMAPを使用して独自のドメインからのメールを読むGmailへのIMAP接続が非常に遅い

  1. 私は2つのテストケースを実行しました。

  2. IMAPを使用してGmailからメールを読む。

120件の電子メールを読む時間は非常に異なります。 Gmailの場合、スクリプト全体が約5秒かかっています(1.2接続、3.8電子メール、0.1629接続、0.0238)。

これらの値は、私が予想した値とは大きく異なります。私がこれまで行ってきた何

:私はGoogleのためにDNSサーバを設定した

  1. 私は二つの方法でサーバーを呼び出して試してみた:

    • 直接:imap.gmail.com
    • 直接IP
    • それだけで働いていたいずれの場合も

によって同じ、それは非常に遅かった。

誰かが私を助けることができますか?

LATER EDIT:

私はGmailのAPIを使用している場合、一部の人々が尋ねます。はい、私はそれを使用して、それはGoogleのIMAPソリューションよりも遅いです。 GoogleのメールボックスをIMAPで1秒ごとにスキャンする必要があります。 私はそれができていることを知っている、私は確かにこれをやっていることを知っている別のアプリをコピーしているので。

+0

このスクリプトは、一度に1つのメールを1つずつ取り込みます。一括フェッチははるかに高速です。 – Max

+1

一括フェッチをどのように行うのですか? –

+0

PHPライブラリはわかりませんが、一度に複数のメッセージを取得する必要があります。 IMAPプロトコルでは、これは 'A FETCH 1,2,3,4,5,6,7,8,9,23,45,28(UID FLAGS ....)'のようになります。要求されたメッセージはすべて同時に送信されます。マニュアルで「シーケンスセット」などを確認してください。この方法では、1回ではなく1回の往復で50メッセージを取得できます。 – Max

答えて

1

私の経験からすると、これはいくつかの役に立つ方法で動作するためには、まず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によるテスト)に関連する変更をすでに行っていることがわかります。

+0

答えは一般的にプロセスのスピードアップに役立ちます。しかし、私の質問はより具体的でした。私の質問は、私の自分のドメインからIMAPを介して、Google Mailの読み込み速度と通常のIMAPの違いについてです。速度差はGmailの10倍遅くなります。どうして? –

+0

応答が長すぎてコメントボックスに書き込めませんでした。答えを参照してください。 – Kitson88

+0

私はGmail APIを使用しました。 Gmail IMAPよりも速くはありません。実際にはかなり遅いです。それは2つの理由で起こります。 1)私は毎秒それを読むので、adn googleはいくらかの待ち時間を導入する。 1回目の電子メールの読み取りには1秒、2回目の時間は長く、3回目のメッセージは長くなります。 2)遅くする理由は、Oauthプロセスです.IMAPの場合は発生しません。 –

関連する問題