[Gmail API] Javaでユーザー情報(言語、不在通知、自動転送、POP、IMAP)を設定する

Gmail API v1（Java）を使用して、
Gmailのユーザーの設定情報を設定する方法
についてご紹介します。

設定できるユーザーの設定情報は下記の5つになります。
・言語の設定
・不在通知の設定
・自動転送の設定
・POPの設定
・IMAPの設定

**・言語の設定**
Gmailメニュー　「設定」 -> 「全般」 -> 「言語」
で設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/87f21217-1c1e-7158-07bd-0562a0f97edd.png">

**・不在通知の設定**
Gmailメニュー　「設定」 -> 「全般」 -> 「不在通知」
で設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/b3167d24-cf02-4445-4011-02d104d44290.png">

**・自動転送の設定**
Gmailメニュー　「設定」 -> 「メール転送とPOP/IMAP」 -> 「転送」
で設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/04173996-1707-d3ee-ce72-9a753ac74767.png">

**・POPの設定**
Gmailメニュー　「設定」 -> 「メール転送とPOP/IMAP」 -> 「POPダウンロード」
で設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/1953f96e-edee-f951-3860-43ef2fdfdda6.png">

**・IMAPの設定**
Gmailメニュー　「設定」 -> 「メール転送とPOP/IMAP」 -> 「IAPアクセス」
で設定できる内容です。
<img width=480 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/33a42712-fd51-df36-022e-4530777009f2.png">

:::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-レスポンスの内容)|
|2||[不在通知を設定](#2-不在通知を設定)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[自動転送を設定](#3-自動転送を設定)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[POPを設定](#4-popを設定)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|
|5||[IMAPを設定](#5-imapを設定)|
||1|[スコープ](#51-スコープ)|
||2|[実行](#52-実行)|
||3|[レスポンスの内容](#53-レスポンスの内容)|

## 1. 言語を設定
指定したユーザーの言語を設定します。

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

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Settings settings = users.settings();
    LanguageSettings content = new LanguageSettings();
    content.setDisplayLanguage("ja");
    Gmail.Users.Settings.UpdateLanguage updateLanguage = settings.updateLanguage("メールアドレス",content);
    
    LanguageSettings res = updateLanguage.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
PUT:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/language
が実行されます。

#### 1.2.2. クエリパラメータ
クエリパラメータはありません。

#### 1.2.3. リクエストボディ
LanguageSettingsのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setDisplayLanguage|String|言語コード(RFC3066)|

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

#### LanguageSettings

|メソッド|戻り値|説明|
|---|---|---|
|getDisplayLanguage|String|言語コード(RFC3066)|

## 2. 不在通知を設定
指定したユーザーの不在通知を設定します。

不在通知設定とは、設定を行うとすぐには返信できないことを
自動的に相手に通知する機能です。

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

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Settings settings = users.settings();
    VacationSettings content = new VacationSettings();

    Gmail.Users.Settings.UpdateVacation updateVacation = settings.updateVacation("メールアドレス",content);
    
    VacationSettings res = updateVacation.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/vacation
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

#### 2.2.3. リクエストボディ
VacationSettingsのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setEnableAutoReply|Boolean|Gmail がメッセージに自動的に返信するか|
|setResponseSubject|String|不在中の返信の件名の前に追加するオプションのテキスト|
|setResponseBodyPlainText|String|プレーンテキスト形式の応答本文<br>responseBodyHtmlが設定されていれば、responseBodyHtmlが優先|
|setResponseBodyHtml|String|HTML形式の応答本文<br>responseBodyPlainTextが設定されていれば、こちらが優先|
|setRestrictToContacts|Boolean|ユーザーの連絡先リストにない受信者に応答を送信するか|
|setRestrictToDomain|Boolean|ユーザーのドメイン外の受信者に応答を送信するか|
|setStartTime|Long|自動応答を送信するためのオプションの開始時間(エポックミリ秒)|
|setEndTime|Long|自動応答の送信のオプションの終了時刻(エポックミリ秒)|

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

#### VacationSettings

|メソッド|戻り値|説明|
|---|---|---|
|getEnableAutoReply|Boolean|Gmail がメッセージに自動的に返信するか|
|getResponseSubject|String|不在中の返信の件名の前に追加するオプションのテキスト|
|getResponseBodyPlainText|String|プレーンテキスト形式の応答本文<br>responseBodyHtmlが設定されていれば、responseBodyHtmlが優先|
|getResponseBodyHtml|String|HTML形式の応答本文<br>responseBodyPlainTextが設定されていれば、こちらが優先|
|getRestrictToContacts|Boolean|ユーザーの連絡先リストにない受信者に応答を送信するか|
|getRestrictToDomain|Boolean|ユーザーのドメイン外の受信者に応答を送信するか|
|getStartTime|Long|自動応答を送信するためのオプションの開始時間(エポックミリ秒)|
|getEndTime|Long|自動応答の送信のオプションの終了時刻(エポックミリ秒)|

## 3. 自動転送を設定
指定したユーザーの自動転送を設定します。

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

### 3.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Settings settings = users.settings();
    AutoForwarding content = new AutoForwarding();
    Gmail.Users.Settings.UpdateAutoForwarding updateAutoForwarding = settings.updateAutoForwarding("メールアドレス",content);
    
    AutoForwarding res = updateAutoForwarding.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PUT:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/autoForwarding
が実行されます。

#### 3.2.2. クエリパラメータ
クエリパラメータはありません。

#### 3.2.3. リクエストボディ
AutoForwardingのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setEnabled|Boolean|すべての受信メールを別のアドレスに自動的に転送するか|
|setEmailAddress|String|すべての受信メッセージが転送される電子メールアドレス|
|setDisposition|[Disposition(enum)](#disposition)|メッセージが転送された後に行う処理|


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

#### AutoForwarding

|メソッド|戻り値|説明|
|---|---|---|
|getEnabled|Boolean|すべての受信メールを別のアドレスに自動的に転送するか|
|getEmailAddress|String|すべての受信メッセージが転送される電子メールアドレス|
|getDisposition|[Disposition(enum)](#disposition)|メッセージが転送された後に行う処理|

#### Disposition

|定義値|内容|
|---|---|
|dispositionUnspecified|未指定|
|leaveInInbox|INBOXにメッセージを残す|
|archive|メッセージをアーカイブする|
|trash|メッセージをゴミ箱に移動する|
|markRead|INBOXにメッセージを残して既読マークをつける|

## 4. POPを設定
指定したユーザーのPOPを設定します。

POPとは、ユーザーが利用している電子メールサービスに問い合わせ、
そこからメールや添付ファイルの全てをダウンロードする仕組みです。

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

### 4.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Settings settings = users.settings();
    PopSettings content = new PopSettings();
    Gmail.Users.Settings.UpdatePop pop = settings.updatePop("メールアドレス",content);
    
    PopSettings res = pop.execute();
    System.out.println(res);
}
```
#### 4.2.1. HTTPリクエスト
GET:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/pop
が実行されます。

#### 4.2.2. クエリパラメータ
クエリパラメータはありません。

#### 4.2.3. リクエストボディ
PopSettingsのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setAccessWindow|[AccessWindow(enum)](#accesswindow)|POP経由でアクセスできるメッセージの範囲|
|setDisposition|[Disposition(enum)](#disposition)|POP経由でメッセージが取得された後に、メッセージに対して実行されるアクション|

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

#### PopSettings

|メソッド|戻り値|説明|
|---|---|---|
|getAccessWindow|[AccessWindow(enum)](#accesswindow)|POP経由でアクセスできるメッセージの範囲|
|getDisposition|[Disposition(enum)](#disposition)|POP経由でメッセージが取得された後に、メッセージに対して実行されるアクション|

#### AccessWindow

|定義値|内容|
|---|---|
|accessWindowUnspecified|未指定|
|disabled|POP経由でアクセスできるメッセージがない|
|fromNowOn|過去のある時点以降に受信されたフェッチされていないメッセージが POP経由でアクセス可能|
|allMail|フェッチされていないすべてのメッセージにPOP経由でアクセス可能|

## 5. IMAPを設定
指定したユーザーのIMAPを設定します。

IMAPとは、メールや添付ファイルがPCやスマホなどの端末には保存されず、
メールサーバー上に保存される仕組みです。
そのため、複数の異なる端末でメールや添付ファイルを確認することができます。

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

### 5.2. 実行

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    
    Gmail.Users.Settings settings = users.settings();
    ImapSettings content = new ImapSettings();
    Gmail.Users.Settings.UpdateImap updateImap = settings.updateImap("メールアドレス",content);
    
    ImapSettings res = updateImap.execute();
    System.out.println(res);
}
```
#### 5.2.1. HTTPリクエスト
PUT:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/imap
が実行されます。

#### 5.2.2. クエリパラメータ
クエリパラメータはありません。

#### 5.2.3. リクエストボディ
ImapSettingsのsetメソッドにより、リクエストボディを設定できます。

|メソッド|引数|説明|
|---|---|---|
|setEnabled|Boolean|IMAPが有効になっているか|
|setAutoExpunge|Boolean|メッセージをすぐに削除するか|
|setExpungeBehavior|[ExpungeBehavior(enum)](#expungebehavior)|メッセージに対して実行されるアクション|
|setMaxFolderSize|Integer|IMAPフォルダーに含めることができるメッセージの数に対するオプションの制限数<br>有効な値は0(制限なし)、1000、2000、5000、10000|

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

#### ImapSettings

|メソッド|戻り値|説明|
|---|---|---|
|getEnabled|Boolean|IMAPが有効になっているか|
|getAutoExpunge|Boolean|メッセージをすぐに削除するか|
|getExpungeBehavior|[ExpungeBehavior(enum)](#expungebehavior)|メッセージに対して実行されるアクション|
|getMaxFolderSize|Integer|IMAPフォルダーに含めることができるメッセージの数に対するオプションの制限数<br>有効な値は0(制限なし)、1000、2000、5000、10000|

#### ExpungeBehavior

|定義値|内容|
|---|---|
|expungeBehaviorUnspecified|未指定|
|archive|削除済みとしてマークされたメッセージをアーカイブ|
|trash|削除済みとしてマークされたメッセージをゴミ箱に移動|
|deleteForever|削除済みとしてマークされたメッセージを即座に完全に削除|

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