【PHP】Gmail API로 메일 받기

6003 단어 PHPgmail

소개



Gmail API 참조는 모두 영어이므로 읽는 데 시간이 걸리고 어려움을 겪었으므로 일본어 메모에 남겨 둡니다.

공식 문서



Gmail API
클래스 Google_Service_Gmail_Message
↑ 여러가지 클래스가 있으므로, 원하는 메소드가 이미 존재하고 있을지도 모릅니다. 먼저 원하는 기능이 구현되지 않았는지 알아봅시다.

이전 준비


  • PHP5.4 이상
  • Composer를 사용할 수 있습니다
  • Gmail을 사용할 수있는 Google 계정이 있습니다

  • 빠른 시작



    1. [ENABLE THE GMAIL API] 버튼을 클릭





    클릭하면 아래와 같은 창이 나오므로 [DOWNLOAD CLIENT CONFIGURATION]
    라는 버튼을 클릭

    credentials.json라는 파일이 다운로드되므로 작업 디렉토리로 파일을 이동합니다.

    2. Google Client 라이브러리 설치


    $ composer require google/apiclient:^2.0
    

    3. 샘플 생성


  • 작업 디렉토리에 quickstart.php라는 파일을 만듭니다
  • 그 파일에 github의 샘플 코드를 copype → htps : // 기주 b. 이 m / g 굉장히 vs / php - mp / s / b / b / rs / r / g r / g cks rt / ku cks rt. php

  • 4. 샘플 실행 && 계정 인증


    $ php quickstart.php 
    

    4-a. 터미널에 링크 대상이 표시되므로 복사하여 브라우저에서 표시
    4-b. 화면에 따라 계정 인증하기
    4-c. 인증 코드가 표시되므로 복사

    4-d. 터미널에 붙여넣고 Enter

    5. 인증 성공! 라벨 목록이 표시됩니다.



    이후에는 작업 디렉토리에 추가된 token.json를 로드하여 인증하므로 일일이 Google 계정을 인증할 필요가 없습니다.php quickstart.php 시도한 다음 다시 실행하자마자 이메일 레이블 목록이 나타납니다.

    6. 메일 목록 얻기



    quickstart.php
    // さっき認証に使用した quickstart.php に追記します。
    
    // 検索条件を追加することができます。
    $optParams = array(
        'maxResults' => '最大取得件数',
        'labelIds'   => 'ラベルのID', // ラベルのidはlistUsersLabels()で取得可能。
        'pageToken'  => 'ページトークン',
        // Gmailのメール検索時の形式で条件を指定できます。
        'q'          => 'from:[email protected] after:2018-02-20',
    );
    // 条件に当てはまるメールの一覧を取得します。
    $messages = $service->users_messages->listUsersMessages($user, $optParams);
    
    // メッセージIDからメールの内容を取得します。
    foreach($messages->getMessages as $message) {
        $message_id = $message->getID();
        $message_contents = $service->users_messages->get($user, $message_id);
        print_r($message_contents);
    }
    

    7. 메모



    메일의 본문은 상기의 코드라고 $message_contents['payload']['body']['data'] 에 있습니다만, URL 세이프 처리가 걸려져 있으므로 디코드할 필요가 있습니다.
    $body = $message_contents['payload']['body']['data'];
    $body = str_replace(array('-', '_'), array('+', '/'), $body);
    $body = base64_decode($body);
    

    로 디코딩할 수 있습니다.

    좋은 웹페이지 즐겨찾기