[Gmail API] Javaでメールボックスの変更履歴一覧を取得する

Gmail API v1（Java）を使用して、
Gmailのメールボックスの変更履歴一覧を取得する方法
についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Gmail API] JavaでGmail APIを使う](https://qiita.com/doran/items/a078e966bfd93c4b19c2)
を参照ください。
:::

本文中の引数にある「メールアドレス」の指定は、
OAuth 2.0使用の場合は「me」（自身）と指定してください。
「me」は認証されたユーザーを示します。

|No||目次|
|---|---|---|
|1||[変更履歴一覧を取得](#1-変更履歴一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|

## 1. 変更履歴一覧を取得
メールボックスの変更履歴一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_READONLY
GmailScopes.GMAIL_METADATA
```
[⧉[Gmail API] JavaでGmail APIを使う(2.2 Gmailインスタンスを取得)](https://qiita.com/doran/items/a078e966bfd93c4b19c2#22-gmailインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

setStartHistoryIdには、
[⧉[Gmail API] Javaでメールボックスのユーザープロフィールを取得する(Profile)](https://qiita.com/doran/items/0d22ca312580d60663a1#profile)
で取得可能な履歴IDを指定します。

```java
public static void main(String[] args) throws Exception{
	Gmail gmail = getGmail();
	Gmail.Users users = gmail.users();
    Gmail.Users.History history = users.history();
    
    Gmail.Users.History.List list = history.list(PATH);
    list.setStartHistoryId(BigInteger.valueOf(履歴ID));

    ListHistoryResponse res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/history
が実行されます。

#### 1.2.2. クエリパラメータ
Gmail.Users.History.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Long|返される履歴レコードの最大数<br>デフォルトは100、最大値は500|
|setPageToken|String|リスト内の結果の特定のページを取得するためのページトークン|
|setLabelId|String|IDと一致するラベルを持つメッセージのみを取得|
|setHistoryTypes|List\<String\>|[履歴タイプ](#履歴タイプ)|

#### 履歴タイプ

|タイプ|内容|
|---|---|
|messageAdded|メールボックスに追加されたメッセージ<br>([HistoryMessageAdded](#historymessageadded))|
|messageDeleted|メールボックスから削除されたメッセージ<br>([HistoryMessageDeleted](#historymessagedeleted))|
|labelAdded|メッセージに追加されたラベル<br>([HistoryLabelAdded](#historylabeladded))|
|labelRemoved|メッセージから削除されたラベル<br>([HistoryLabelRemoved](#historylabelremoved))|

### 1.3. レスポンスの内容

#### ListHistoryResponse

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|getNextPageToken|String|リスト内の結果の次のページを取得するためのページ トークン|
|getHistoryId|String|メールボックスの現在の履歴レコードID|
|getHistory|List\<[History](#history)\>|履歴レコードのリスト|


#### History

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|getId|String|メールボックスのシーケンスID|
|getMessages|List\<[Message](#message)\>|履歴レコードで変更されたメッセージのリスト|
|getMessagesAdded|List\<[HistoryMessageAdded](#historymessageadded)\>|履歴レコードのメールボックスに追加されたメッセージ|
|getMessagesDeleted|List\<[HistoryMessageDeleted](#historymessagedeleted)\>|履歴レコードのメールボックスから削除されたメッセージ|
|getLabelsAdded|List\<[HistoryLabelAdded](#historylabeladded)\>|履歴レコード内のメッセージに追加されたラベル|
|getLabelsRemoved|List\<[HistoryLabelRemoved](#historylabelremoved)\>|履歴レコードのメッセージから削除されたラベル|

#### Message

|メソッド|戻り値|説明|
|---|---|---|
|getId|String|メッセージID|
|getThreadId|String|メッセージが属するスレッドID|
|getLabelIds|List\<String\>|このメッセージに適用されるラベルのIDのリスト|
|getSnippet|String|メッセージテキストの短い部分|
|getHistoryId|String|このメッセージを変更した最後の履歴レコードの ID|
|getInternalDate|Long|内部メッセージ作成タイムスタンプ(エポックミリ秒)|
|getPayload|[MessagePart](#messagepart)|メッセージ部分の解析された電子メール構造。
|getSizeEstimate|Integer|メッセージの推定サイズ(バイト単位)|
|getRaw|String|RFC2822形式で Base64URLエンコードされた文字列の電子メールメッセージ全体|

#### MessagePart

|メソッド|戻り値|説明|
|---|---|---|
|getPartId|String|メッセージ部分ID|
|getMimeType|String|メッセージ部分のMIMEタイプ|
|getFilename|String|添付ファイルのファイル名|
|getHeaders|List\<[MessagePartHeader](#messagepartheader)\>|メッセージ部分のヘッダーのリスト|
|getBody|[MessagePartBody](#messagepartbody)|メッセージ部分の本文|
|getParts|List\<[MessagePart](#messagepart)\>|子のMIMEメッセージ部分|

#### MessagePartHeader

|メソッド|戻り値|説明|
|---|---|---|
|getName|String|セパレータの前のヘッダーの名前|
|getValue|String|区切り文字の後のヘッダーの値|

#### MessagePartBody

|メソッド|戻り値|説明|
|---|---|---|
|getAttachmentId|String|添付ファイルID|
|getSize|Integer|メッセージ部分データのバイト数|
|getData|String|MIME メッセージ部分の本文データ(base64 url エンコード文字列)|

#### HistoryMessageAdded

|メソッド|戻り値|説明|
|---|---|---|
|getMessage|[Message](#message)|追加されたメッセージ|

#### HistoryMessageDeleted

|メソッド|戻り値|説明|
|---|---|---|
|getMessage|[Message](#message)|削除されたメッセージ|

#### HistoryLabelAdded

|メソッド|戻り値|説明|
|---|---|---|
|getLabelIds|List\<String\>|String|追加されたラベルID|
|getMessage|[Message](#message)|追加されるラベル|

#### HistoryLabelRemoved

|メソッド|戻り値|説明|
|---|---|---|
|getLabelIds|List\<String\>|削除されたラベルID|
|getMessage|[Message](#message)|削除されたラベル|

<br>
<br>
おしまい。。