[Gmail API] Javaで送信者エイリアスを作成・更新・削除する

Gmail API v1（Java）を使用して、
Gmailの送信者エイリアスを作成・更新・削除する方法
についてご紹介します。

**送信者エイリアスとは**
メールを送信する時、送信者エイリアスからメールを送信しているように見せることができる機能です。
最初に、メール転送を設定してアクティブにしておきます。
Gmailでは、「設定」 -> 「アカウントとインポート」 -> 名前:「他のメールアドレスを追加」
から設定できます。
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/28614d1d-afb5-e31e-354b-2bd786b93ba0.png">

この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|[レスポンスの内容](#23-レスポンスの内容)|
|3||[送信者エイリアスを更新](#3-送信者エイリアスを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[送信者エイリアスを削除](#4-送信者エイリアスを削除)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|

## 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.SendAs sendAs = settings.sendAs();
    SendAs content = new SendAs();
    Gmail.Users.Settings.SendAs.Create create = sendAs.create("メールアドレス",content);
    
    SendAs res = create.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs
が実行されます。

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

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

|メソッド|引数|説明|
|---|---|---|
|setSendAsEmail|String|送信者エイリアスメールアドレス<br>作成時のみ指定可能|
|setDisplayName|String|エイリアスを使用して送信されるメールの「From:」ヘッダーに表示される名前
|setReplyToAddress|String|エイリアスを使用して送信されるメールの「Reply-To:」ヘッダーに含まれるメールアドレス|
|setSignature|String|GmailウェブUIでエイリアスを使用して作成されたメッセージに含まれるオプションのHTML署名|
|setIsDefault|Boolean|新しいメッセージの作成や休暇中の自動返信の送信などの状況で、このアドレスがデフォルトの「From:」アドレスとして選択されるか|
|setTreatAsAlias|Boolean|ユーザーのプライマリメールアドレスのエイリアスとして扱うか|
|setSmtpMsa|[SmtpMsa](#smtpmsaset)|エイリアスを使用して送信されるメールの送信リレーとして使用されるオプションのSMTPサービス|

#### SmtpMsa(set)

|メソッド|引数|説明|
|---|---|---|
|getHost|String|【必須】SMTPサービスのホスト名|
|getPort|Integer|【必須】SMTPサービスのポート
|getUsername|String|SMTPサービスでの認証に使用されるユーザー名|
|getPassword|String|SMTPサービスでの認証に使用されるパスワード|
|getSecurityMode|[SecurityMode(enum)](#securitymode)|【必須】SMTPサービスとの通信を保護するために使用されるプロトコル|

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

#### SendAs

|メソッド|戻り値|説明|
|---|---|---|
|getSendAsEmail|String|送信者エイリアスメールアドレス|
|getDisplayName|String|エイリアスを使用して送信されるメールの「From:」ヘッダーに表示される名前
|getReplyToAddress|String|エイリアスを使用して送信されるメールの「Reply-To:」ヘッダーに含まれるメールアドレス|
|getSignature|String|GmailウェブUIでエイリアスを使用して作成されたメッセージに含まれるオプションのHTML署名|
|getIsPrimary|Boolean|アカウントへのログインに使用されるプライマリアドレスか|
|getIsDefault|Boolean|新しいメッセージの作成や休暇中の自動返信の送信などの状況で、このアドレスがデフォルトの「From:」アドレスとして選択されるか|
|getTreatAsAlias|Boolean|ユーザーのプライマリメールアドレスのエイリアスとして扱うか|
|getSmtpMsa|[SmtpMsa](#smtpmsa)|エイリアスを使用して送信されるメールの送信リレーとして使用されるオプションのSMTPサービス|
|getVerificationStatus|[VerificationStatus(enum)](#verificationstatus)|送信エイリアスとして使用できるかどうかの検証状態|

#### SmtpMsa

|メソッド|戻り値|説明|
|---|---|---|
|getHost|String|SMTPサービスのホスト名|
|getPort|Integer|SMTPサービスのポート
|getSecurityMode|[SecurityMode(enum)](#securitymode)|SMTPサービスとの通信を保護するために使用されるプロトコル|

#### VerificationStatus

|定義値|内容|
|---|---|
|verificationStatusUnspecified|未設定|
|accepted|このアドレスは、送信エイリアスとして使用する準備完了|
|pending|住所は所有者による確認を持っている|

#### SecurityMode

|定義値|内容|
|---|---|
|securityModeUnspecified|未設定|
|none|リモートSMTPサービスとの通信は安全ではない|
|ssl|リモートSMTPサービスとの通信は、SSLを使用して保護|
|starttls|リモートSMTPサービスとの通信は、STARTTLSを使用して保護|


## 2. 送信者エイリアスを上書き
送信者エイリアスを上書きします。

[3. 送信者エイリアスを更新](#3-送信者エイリアスを更新)と違うところは、
存在する送信者エイリアスを新しい送信者エイリアスに置き換えます。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.GMAIL_SETTINGS_BASIC
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.SendAs sendAs = settings.sendAs();
    SendAs content = new SendAs();
    Gmail.Users.Settings.SendAs.Update update = sendAs.update("メールアドレス","送信者エイリアスメールアドレス",content);
    
    SendAs res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信者エイリアスメールアドレス}
が実行されます。

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

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

[1.2.3. リクエストボディ(SendAs)](#123-リクエストボディ)と同じです。

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

#### SendAs

[1.3. レスポンスの内容(SendAs)](#sendas)の内容と同じです。

## 3. 送信者エイリアスを更新
送信者エイリアスを更新します。

[2. 送信者エイリアスを上書き](#2-送信者エイリアスを上書き)との違いは、
存在する送信者エイリアスの設定内容を更新します。

### 3.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.GMAIL_SETTINGS_BASIC
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();
    
    Gmail.Users.Settings.SendAs sendAs = settings.sendAs();
    SendAs content = new SendAs();
    Gmail.Users.Settings.SendAs.Patch patch = sendAs.patch("メールアドレス","送信者エイリアスメールアドレス",content);
    
    SendAs res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信者エイリアスメールアドレス}
が実行されます。

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

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

[1.2.3. リクエストボディ(SendAs)](#123-リクエストボディ)と同じです。

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

#### SendAs

[1.3. レスポンスの内容(SendAs)](#sendas)の内容と同じです。


## 4. 送信者エイリアスを削除
送信者エイリアスを削除します。

### 4.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
GmailScopes.GMAIL_SETTINGS_SHARING
```
[⧉[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();
    
    Gmail.Users.Settings.SendAs sendAs = settings.sendAs();
    Gmail.Users.Settings.SendAs.Delete delete = sendAs.delete("メールアドレス","送信者エイリアスメールアドレス");
    
    delete.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信者エイリアスメールアドレス}
が実行されます。

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

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

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

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

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