2013-02-19 68 views
1

我對IMAP有點問題。 基本上,我連接到服務器以獲取文件夾名稱,爲每個文件夾重新連接,循環瀏覽每條消息並執行我所需的操作。PHP 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地址,而加速起來一點比主機名(這是除了指定端口之外),儘管問題依然存在,隨着事情的發展,事情變得越來越慢。

回答

1

這完全取決於您的網絡和連接IMAP服務器的能力以迎合客戶端請求。 imap_body實際上是獲取郵件正文,並且郵件大小可以從幾個kbs到20-25 mbs不等。

客戶端沒有什麼可以做的。

有時服務器試圖扼殺連接的情況下,如果數據傳輸過高,在這種情況下,您可以嘗試重新連接連接並從以前的狀態繼續。

更新到IP不會幫助你,而是我會建議你只使用主機名。

+0

那麼郵件正文不是很大,我知道內容應該(應該!)是什麼。不幸的是,我無法用服務器做任何事情,因爲它是outlook 365,而不是與我有任何關係。 – rich 2013-02-20 13:17:08

1

嘗試重新連接郵件服務器後,每20/25封郵件或50/100mb的數據下載。 我已經看到IMAP服務器降低了這一點後的速度...

+0

嗯,這是我一直在想的事情。只需要制定出最好的方法,由於iuid的變化,當我刪除/清除任何我需要的。 – rich 2013-02-20 13:15:18