[Gmail API] Javaで転送アドレスを作成・削除する

Gmail API v1（Java）を使用して、
Gmailのメールボックス内の転送アドレスを作成・削除する方法
についてご紹介します。

**転送アドレスとは**
受信したメールを設定したメールアドレスへそのまま送る機能です。
Gmailでは、「設定」 -> 「メール転送とPOP/IMAP」 -> 「転送先アドレスを追加」
から設定できます。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/b748f73a-9c88-fec0-96ac-360215596642.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-レスポンスの内容)|


## 1. 転送アドレスを作成
メールボックス内の転送アドレスを作成します。

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

### 1.2. 実行
転送アドレスがない場合はレスポンスでNULLが返ります。

```java
public static void main(String[] args) throws Exception{
    Gmail gmail = getGmail();
    Gmail.Users users = gmail.users();
    Gmail.Users.Settings settings = users.settings();
    
    Gmail.Users.Settings.ForwardingAddresses forwardingAddresses = settings.forwardingAddresses();
    ForwardingAddress content = new ForwardingAddress();
    Gmail.Users.Settings.ForwardingAddresses.Create create = forwardingAddresses.create("メールアドレス",content);

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

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

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

|メソッド|引数|説明|
|---|---|---|
|setForwardingEmail|String|転送メールアドレス|
|setVerificationStatus|[VerificationStatus(enum](#verificationstatus)|このアドレスが検証されており、転送に使用できるかどうか|

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

#### ForwardingAddress

|メソッド|戻り値|説明|
|---|---|---|
|getForwardingEmail|String|転送メールアドレス|
|getVerificationStatus|[VerificationStatus(enum](#verificationstatus)|このアドレスが検証されており、転送に使用できるかどうか|

#### VerificationStatus

|定義値|内容|
|---|---|
|verificationStatusUnspecified|未設定|
|accepted|このアドレスは転送に使用する準備済み|
|pending|住所は所有者による確認待ち|

## 2. 転送アドレスを削除
転送アドレスを削除します。

### 2.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
GmailScopes.GMAIL_SETTINGS_SHARING
```
[⧉[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();
    
    Gmail.Users.Settings.ForwardingAddresses forwardingAddresses = settings.forwardingAddresses();
    Gmail.Users.Settings.ForwardingAddresses.Delete delete = forwardingAddresses.delete("メールアドレス","転送メールアドレス");

    delete.execute();
}
```
#### 2.2.1. HTTPリクエスト
DELETE:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/forwardingAddresses/{転送メールアドレス}
が実行されます。

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

#### 2.2.3. リクエストボディ
リクエストボディはありません。

### 2.3. レスポンスの内容
レスポンスはありません。
削除に失敗した場合、例外が発生します。

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