[Gmail API] JavaでGmailの代理人を生成・削除する

Gmail API v1（Java）を使用して、
Gmailの代理人の情報を取得するを生成・削除する方法
についてご紹介します。

**代理人とは**
ユーザーやグループを代理人に指定してGmailアカウントへのアクセスを許可すると、
代理人は受信トレイで次の操作ができます。
・フィルタ（ルール）でメールを自動的に振り分ける
・メールをアーカイブしてやりとりの記録を残す
・ラベルを使用してメールのステータスを管理する
・送信者として代理人名を表示する、または表示しない
代理人は、受信トレイの共有と同義です。

このAPIは、ドメイン全体の権限を委任されたサービスアカウントを
使用しての発行のみ利用可能です。OAuth 2.0では利用できません。

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

|No||目次|
|---|---|---|
|1||[代理人情報を生成](#1-代理人情報を生成)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[代理人情報を削除](#2-代理人情報を削除)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](213-レスポンスの内容)|

## 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. 実行

```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.Delegates delegates = settings.delegates();
	Delegate content = new Delegate();
	content.setDelegateEmail("代理人のメールアドレス");
	content.setVerificationStatus("accepted");
	Gmail.Users.Settings.Delegates.Create create = delegates.create("メールアドレス",content);

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

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

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

|メソッド|引数|説明|
|---|---|---|
|setDelegateEmail|String|代理人のメールアドレス|
|setVerificationStatus|[VerificationStatus(enum)](#verificationstatus)|このアドレスが検証済みで、アカウントの代理人として機能できるか|

#### VerificationStatus

|定義値|説明|
|---|---|
|verificationStatusUnspecified|未設定|
|accepted|アドレスはアカウントの代理人として機能|
|pending|確認リクエストがそのアドレスに送信されましたが、所有者はまだそれを受け入れていない|
|rejected|確認リクエストがそのアドレスに郵送されましたが、所有者はそれを拒否|
|expired|確認リクエストがそのアドレスに送信されましたが、確認されないまま期限切れ|

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

#### ListDelegatesResponse

|メソッド|戻り値|説明|
|---|---|---|
|getDelegateEmail|String|代理人のメールアドレス|
|getVerificationStatus|[VerificationStatus(enum)](#verificationstatus)|このアドレスが検証済みで、アカウントの代理人として機能できるか|

## 2. 代理人情報を削除
代理人情報を削除します。

削除したい代理人メールアドレスを指定します。
[1. 代理人情報を生成(ListDelegatesResponse)](#listdelegatesresponse)の
getDelegateEmail()で取得した値を設定します。

### 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.Delegates delegates = settings.delegates();
	Delegate content = new Delegate();
	content.setDelegateEmail("代理人のメールアドレス");
	content.setVerificationStatus("accepted");
	Gmail.Users.Settings.Delegates.Delete delete = delegates.delete("メールアドレス","代理人メールアドレス");

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

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

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

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

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

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