2013-01-01 5 views
3

Gmail에 로그인하고받은 편지함의 모든 이메일을 삭제하는 php 함수를 조합하려고합니다. 그게 전부 야. 나는 그것과 함께 약간 정지 상태에 있으며 다른 코드를 수정하여 작동 시키도록하는 등 여러 가지 방법으로 시도했지만 제한된 성공을 거두었 다.계정에서 모든 이메일 삭제

가장 최근의 존재 :

내가 부족하거나 할 수있는 청소기 방법이 무엇인지
function deleteEmails($emailAddress, $reportUrl, $reportType) 
{ 
    $result = "error"; 
    // DOWNLOAD DATA 
    // the max time allows for the email to download 
    set_time_limit(30000); 

    // connect to gmail with your credentials 
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; 
    $username = $emailAddress; # e.g [email protected] 
    $password = $superSecretPasswordShhhhhhhh; 


    // try to connect 
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error()); 
    $emails = imap_search($inbox,'ALL'); 
    // if any emails found, iterate through each email 
    if($emails) 
     { 
      $count = 1; 

      // for every email... 
      foreach($emails as $email_number) 
       { 
        // TRIED BOTH, BUT THE EMAILS WOULDN'T DELETE 
        //imap_delete($inbox,$email_number); 
        imap_mail_move($inbox, $email_number,'[Gmail]/Bin'); 
        $result = "success"; 
       } 
     } 
    // close the connection 
    imap_close($inbox,CL_EXPUNGE); 
    return $result; 
} 

어떤 아이디어?

계정에서 이메일을 다운로드하고 첨부 된 보고서를 저장하는 기능을 루프 응용 프로그램이 있습니다 :

왜의 질문에 대답합니다. 이것은 잘 작동하지만 문제는 매분마다 보고서가 도착하므로 기능을 실행할 때 수백 가지의 보고서가 진행될 수 있습니다. 그래서 프로세스를 시작하기 전에 백 로그를 청소하면받은 편지함을 깨끗하게 유지하는 것이 가장 좋습니다.

다음 코드는 그대로 사용하십시오. 그것은 전자 메일을 삭제한다는 점에서 작동하지만 전자 메일이 모두 사라지더라도 서버 오류가 발생할 때까지 실행됩니다. 제가 누락 된 아이디어가 있습니까?

// DELETE ALL EMAILS IN ACCOUNT 

함수 deleteEmails ($ EMAILADDRESS)는 는 $ { 은 = "오류"를 발생; // 데이터 다운로드 // 전자 메일을 다운로드 할 수있는 최대 시간이 허용됩니다. set_time_limit (30000);

// connect to gmail with your credentials 
    $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; 
    $username = $emailAddress; # e.g [email protected] 
    $password = $superSecretPasswordShhhhh; 


    // try to connect 
    $inbox = imap_open($hostname,$username,$password) or die('Cannot download information: ' . imap_last_error()); 
    $emails = imap_search($inbox,'ALL'); 



    // if any emails found, iterate through each email 
    if($emails) 
     { 
      $count = 1; 

      // put the newest emails on top 
      rsort($emails); 


      // for every email... 
      foreach($emails as $email_number) 
       { 
        // TESTING BOTH METHODS 
        imap_delete($inbox,$email_number); 
        //imap_mail_move($inbox, $email_number,'[Gmail]/Bin'); 
        $result = "success"; 
       } 
     } 
    // close the connection 
    imap_expunge($inbox); 
    imap_close($inbox,CL_EXPUNGE); 
    return $result; 
} 
+3

조금 의심스러운가요? 왜 이것이 좋은 일인가? –

+0

이것은 Gmail 자체에서 쉽게 수행 할 수 있습니다. 수표를 클릭하면 상단에 작은 메시지가 나타나며 "이 페이지에있는 모든 ** 25 ** 대화가 선택되었습니다."라는 메시지가 표시됩니다. ** 모든 14113 ** 대화를 Inbox에서 선택하십시오. 모두 선택한 다음 휴지통을 클릭하면 모든 항목이받은 편지함에서 삭제됩니다. – Nathan

+0

계정에서 전자 메일을 다운로드하고 첨부 된 보고서를 저장하는 기능을 반복하는 응용 프로그램이 있습니다. 이것은 잘 작동하지만 문제는 매분마다 보고서가 도착하므로 기능을 실행할 때 수백 가지의 보고서가 진행될 수 있습니다. 따라서 프로세스를 시작하기 전에 백 로그를 정리하면받은 편지함을 깨끗하게 유지하는 것이 가장 좋습니다. –

답변

1

당신은 연결을 닫기 전에 호출해야합니다

imap_expunge($inbox); 

이는 제거를 표시된 모든 메시지를 삭제합니다.

imap_mail_moveimap_delete으로 가장 먼저 대체하십시오.

자세히 알아보기 : http://php.net/imap-expunge

+0

감사합니다. 전자 메일을 삭제한다는 점에서 효과가 있었지만 여전히 서버 오류와 관련된 문제가 있습니다. 그것은 시간 초과 문제가 될 것 같지만 어떤 이메일이 남아 있지 않을 때에도 계속 될 수있는 원인이 무엇인지 확신 할 수 없습니다. –

+0

'if ($ emails)'를 'if ($ emails> 0)'로 변경하십시오. 제 답변을 받아 들일 수 있도록 표기하십시오 – Jeffrey

+0

옳게 대답했습니다. 감사합니다 Artaex! –

관련 문제