2016-12-11 1 views
3

David Walsh의 스크립트를 사용하여 IMAP을 통해 Gmail에 연결하고 화면에 이메일 데이터를 출력합니다. IMAP를 사용하여 내 자신의 도메인에서 이메일을 읽기Gmail에 대한 IMAP 연결 속도가 매우 느림

  1. :

    나는 두 개의 테스트 케이스를 실행했다.

  2. IMAP을 사용하여 Gmail에서 이메일을 읽습니다.

120 개의 이메일을 읽는 시간은 매우 다릅니다. Gmail의 경우 전체 스크립트는 1.2 초, 이메일 3.8 자, 0.1629 연결 및 0.0238 초당 약 5 초가 걸립니다.

이 값은 내가 예상했던 것과 매우 다릅니다. 내가 지금까지했던 어떤

: 나는 구글의 DNS 서버를 구성한

  1. .

    • 이 직접 : imap.gmail.com IP로
    • 직접

이 두 경우는 단지 일

  • 나는 두 가지 방법으로 서버를 호출하려고했습니다 같은, 그것은 매우 느렸다.

    아무도 도와 줄 수 있습니까?

    LATER 편집 : I Gmail에서 API를 사용한 경우 일부 사람들이 물어

    . 예, 사용했으며 Google IMAP 솔루션보다 느립니다. Google 사서함을 IMAP과 함께 1 초마다 검색해야합니다. 다른 앱을 복사하기 때문에이 작업을 수행 할 수 있음을 알고 있습니다. 확실히이 작업을 수행하고 있습니다.

  • +0

    글쎄, 그 스크립트는 한 번에 하나씩 각 이메일을 가져옵니다. 일괄 반입은 훨씬 빠릅니다. – Max

    +1

    일괄 페치는 어떻게합니까? –

    +0

    PHP 라이브러리를 모르지만 한 번에 둘 이상의 메시지를 가져와야합니다. IMAP 프로토콜에서 이것은'A FETCH 1,2,3,4,5,6,7,8,9,23,45,28 (UID FLAGS ....)'와 유사하며, 요청한 모든 메시지를 동시에. 설명서에서 '시퀀스 세트'등을 확인하십시오. 이렇게하면 1 대신 왕복 당 50 개의 메시지를 가져올 수 있습니다. – Max

    답변

    1

    내 경험에 비추어 볼 때이 방법을 사용하려면 먼저 웹 메일 플랫폼의 작동 방식을 살펴 봐야합니다. 전자 메일을 페이지에서 볼 때 공급자는 로그인 할 때 전자 메일 서버의 모든 전자 메일을 페이지로 가져 오지 않습니다. 이것이 표준 이었다면, 서버/디스크는 항상 부하로 인해 어려움을 겪을 것입니다. 질의는 제어되며 일반적으로 화면에 한 번에 약 50-100 개의 항목이 표시됩니다. 일부는 모든 항목이 표시되는 모양을 제공하지만 (Outlook Web Access) 실제로 사용자가 스크롤 할 때 검색을 시작합니다. 가져 오기 쿼리의 결과 양을 제한하는 아래 스크립트로 테스트하는 것이 좋습니다. 비슷한 문제를 테스트하기 위해 만들어졌으며 테스트를 위해 훌륭했습니다. $mailNumber을 화면 (INT)에 인쇄하고 테스트하려는 레코드의 양으로 변경하십시오. 각 전자 메일을 선택할 수 있으며 전자 메일이 HTML로 작성된 경우가 아니면 일반 텍스트를 볼 수 있습니다. 또한 연결시 응답 시간이 느려질 수 있으므로 SSL 유효성 검사를 비활성화했습니다.나는 문제가 외부 IMAP 연결을 아래로 Gmail을 조절 대역폭에 의심이는 Gmail을 발생으로

    , 그리고 당신이 안정적인 인터넷 연결이 같은데요 :

    $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 포털을 사용함을 잊지 마십시오 (직접 조절되지 않은 IMAP 데이터 서버에 직접 연결된 의심의 여지가 없습니다). 그리고 IMAP 데이터를 캐시하는 전자 메일 클라이언트는 새 메일을 체크인하고 클라이언트에 메일을 저장합니다. 왜 이런 증상이 눈에 띄지 않는지.

    IMAP 데이터를 저장하고 자주 Gmail IMAP 서버와 비교하는 DB 솔루션을 고려해 볼 가치가 있습니다. 이런 식으로 유일한 병목 현상이 DB입니다. Bare를 사용하면 Google 직판으로 이걸 제기해야하지만 무료 서비스에 많은 도움을 줄 수 있을지는 의문입니다.

    마지막 옵션은 완전히 다른 솔루션을 사용하는 것입니다. Google은 Gmail API을 가지고 있기 때문에 주어진 사서함에서 데이터를 더 빠르게 가져올 수 있는지 확인할 수 있습니다.

    또한 코멘트 응답 :

    당신은 느슨하게 언급했듯이, 당신은 API 또는 IMAP를 사용하는지, 당신은 당신이 당신의 코드의 경우 속도와 관련하여 실제 컨트롤을 가지고 있지 않은 프로토콜을 통해 서비스에 액세스 최적화되었습니다. 위의 예제는 테스트를 위해 Javascript/HTML bloatware를 제거합니다. 실제 속도가 향상되지 않았고 호스팅 된 플랫폼에서 IMAP이 빠르게 작동한다는 것을 확인 했으므로 문제는 Gmail이나 ISP에 있습니다. 따라서 해결할 가능성이있는 경우 직접 연락해야합니다. 나는 그것이 당신의 ISP 인 것을 매우 의심합니다. 그러나 당신이 구글과 함께 어디에서라도 얻을 수 없다면 여전히 전화입니다. 나는 DNS 변경을 제안했지만, 당신이 이미 IP를 통한 테스트를 통해 해결할 수있는 희망적인 변화를 이뤘음을 알 수 있습니다.

    +0

    답은 일반적으로 프로세스 속도를 높이는 데 도움이됩니다. 그러나 나의 질문은 더 구체적이었다. 내 질문은 IMAP을 통해 Google 메일 읽기 속도와 내 도메인의 일반 IMAP 간의 차이점입니다. 속도 차이는 Gmail의 경우 10 배 느립니다. 왜? –

    +0

    응답이 너무 커서 설명 상자에 글을 쓸 수 없습니다. 답변을 참조하십시오. – Kitson88

    +0

    Gmail API를 사용했습니다. 그것은 Gmail IMAP보다 빠르지 않습니다. 꽤 느립니다. 그 이유는 두 가지입니다. 1) 왜냐하면 내가 매초마다 읽기 때문에, adn google은 약간의 대기 시간을 가져온다. 따라서 이메일을 1 회 읽는 데는 1 초가 걸리며, 2 단계는 더 오래 걸리고 3 단계는 길게 진행됩니다. 2) 속도 저하의 원인은 Oauth 프로세스입니다. IMAP은 발생하지 않습니다. –

    관련 문제