Lấy địa chỉ gmail với api token

Bài viết này mình memo lại những kinh nghiệm và khó khăn khi làm việc với Google Gmail API.Những ai đang làm việc liên quan đến Gmail API có thể tham khảo.

Google Developers Console

Đây là nơi chứa những thiết lập cần thiết đối với lập trình viên khi làm việc liên quan tới Google API.

Tạo Project mới ở Google Developers Console

https://console.developers.google.com/project

Đầu tiên bạn cần phải có 1 tài khoản Google.

Truy cập vào link trên sẽ có button tạo Project , ta có thể tạo bao nhiêu Project tùy ý .

Sau khi tạo Project xong sẽ xuất hiện danh sách các API của Google , chọn API mà bạn muốn sử dung , trong bài viết này mình chỉ chọn Gmail API.

Mặc định trạng thái của Gmail API là Disable, click vào Enable , để Enable Gmail API.

Tạo Credentials

Tạo Credentials theo các bước sau : Credentials ->Create credentials -> Oauth client ID

Tùy theo mục đích sử dụng mà có những lựa trọn thích hợp , trong bào viết này tôi chạy ở Background nên tôi trọn Application type là Other.

Kết thúc bước này là bạn sẽ có được Client ID và Client secret.

Lấy OAuth Code

https://accounts.google.com/o/oauth2/auth?client_id={Oauth client ID}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/gmail.readonly&response_type=code&approval_prompt=force&access_type=offline

Bằng cách request vào link trên với tham số client_id chính là client_id mình lấy được ở bước trên ,bạn sẽ được Google cung cấp một mã code , và dùng mã code này cho các thiết lập kế tiếp .

Còn một tham số quan trong khác nữa là scope.Bạn có thể can thiệp viết mail , sửa mail , hay xóa mail được hay không chính là nhờ vào tham số scope nầy .

Theo như hình trên thì với scope=https://mail.google.com/ thì bạn có quyền hạn cao nhất , có thể can thiệp đến mọi thứ trên Gmail của bạn. Tùy theo mục đích sử dụng mà nên có những lựa trọn phù hợp.

Kết quả sau khi request:

Lấy Access Token

Để truy cập vào Gmail API cần phải có Access Token.

Resquest:

curl -d client_id={OAuth Client ID} -d client_secret={OAuth Client secret} -d redirect_uri=urn:ietf:wg:oauth:2.0:oob -d grant_type=authorization_code -d code={cái code vừa lấy phía trên} https://accounts.google.com/o/oauth2/token

Response

{
  "access_token" : "xxxxxxxxxxxxxxxxx",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "xxxxxxxxxxxxxxxxxxxxx"
}

Lấy Access Token bằng Refresh Token

Do access__token chỉ có hiệu lực trong vòng 60 phút , quá thời gian đó ta phải refresh lại access token mới để truy cập Gmail API bằng refresh token.

Resquest:

curl -d "client_id={ OAuth Client ID }&client_secret={ OAuth Client secret }&refresh_token={ refresh_token}&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token

Response

{
  "access_token" : "xxxxxxxxxxxxxxxxxxxxxxxx",
  "token_type" : "Bearer",
  "expires_in" : 3600
}

Thao tác với API Gmail

Với Access Token đã lấy được ở trên ta có thể truy cập và thao tác với Gmail API.

Lấy danh sách Mail

Resquest:

curl -H "Authorization: Bearer {access_token}" https://www.googleapis.com/gmail/v1/users/me/messages/

Response:

{
 "messages": [
  {
   "id": "xxxxxx",
   "threadId": "xxxx"
  },
  {
   "id": "xxxxxx",
   "threadId": "xxxx"
  },
  {
   "id": "xxxxxx",
   "threadId": "xxxx"
  },
   .
   .
   .
  {
   "id": "xxxxxx",
   "threadId": "xxxx"
  }
 ],
 "nextPageToken": "xxxxxxxx",
 "resultSizeEstimate": 520
}

Dựa vào id ở trên ta có thể lấy được nội dung chi tiết của mail.

Lấy nội dung Mail

Resquest:

curl -H "Authorization: Bearer {access_token}" https://www.googleapis.com/gmail/v1/users/me/messages/{id lấy được phía trên}

Response:

"id": "{メール一覧で取得したid}",
 "threadId": "メールのスレッドID",
 "labelIds": [分類されているラベルID1,分類されているラベルID2],
 "snippet": "本文のスニペット",
 "historyId": "9052307",
 "payload": {
  "partId": "",
  "mimeType": "text/plain",
  "filename": "",
  "headers": [
   {
    "name": "Delivered-To",
    "value": "受信者のメールアドレス"
   },
   {
    "name": "Received",
    "value": "by xx.xx.xx.xxx with SMTP id xxxxxx;        Thu, 25 Dec 2014 07:06:06 -0800 (PST)"
   },
   {
    "name": "X-Received",
    "value": "by xx.xx.xx.xxx with SMTP id xxxxxx;        Thu, 25 Dec 2014 07:05:32 -0800 (PST)"
   },
   {
    "name": "Return-Path",
    "value": "返信先のメールアドレス"
   },
   {
    "name": "From",
    "value": "メールアドレス(From)"
   },
   {
    "name": "to",
    "value": "メールアドレス(To)"
   },
   {
    "name": "Cc",
    "value": ""
   },
   {
    "name": "Date",
    "value": "Fri, 26 Dec 2014 00:05:26 +0900"
   },
   {
    "name": "MIME-Version",
    "value": "1.0"
   },
   {
    "name": "Content-Type",
    "value": "text/plain; charset=\"iso-2022-jp\""
   },
   {
    "name": "Content-Transfer-Encoding",
    "value": "7bit"
   },
   {
    "name": "Subject",
    "value": "メールの件名"
   },
   {
    "name": "Reply-To",
    "value": "返信先メールアドレス"
   },
   {
    "name": "X-Mail-Count",
    "value": "2476689"
   },
   {
    "name": "Precedence",
    "value": "bulk"
   },
   {
    "name": "X-QuickML",
    "value": "true"
   }
  ],
  "body": {
   "size": 1288,
   "data": "本文でベース64エンコードされた本文"
  }
 },
 "sizeEstimate": 3933
}

Kết luận

Còn nhiều thao tác khác các bạn có thể tự tìm hiểu thêm ở địa chỉ bên dưới :

https://developers.google.com/gmail/api/v1/reference/users/messages/get