[Gmail API] Javaで送信元エイリアスのS/MIME構成を設定・削除する

Gmail API v1（Java）を使用して、
送信元エイリアスのS/MIME構成を設定・削除する方法
についてご紹介します。

**S/MIMEとは**
電子証明書を用いたメールのなりすましや改ざん、盗聴などを防ぐための仕組みです。
セキュリティを高めるために、メールの暗号化と電子署名を行います。

このAPIは、無料版のアカウントでは使用できず、利用するには
有料版の「Google Workplace」でのアカウントが必要になります。

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

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

|No||目次|
|---|---|---|
|1||[デフォルトのS/MIME構成を設定](#1-デフォルトのsmime構成を設定)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[S/MIME構成を設定](#2-smime構成を設定)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|
|3||[S/MIME構成を削除](#3-smime構成を削除)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|

## 1. デフォルトのS/MIME構成を設定
送信元エイリアスのデフォルトのS/MIME構成を設定します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
GmailScopes.GMAIL_SETTINGS_BASIC
GmailScopes.MAIL_GOOGLE_COM
GmailScopes.GMAIL_MODIFY
GmailScopes.GMAIL_READONLY
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();
    Gmail.Users.Settings.SendAs.SmimeInfo smimeInfo = sendAs.smimeInfo();
    Gmail.Users.Settings.SendAs.SmimeInfo.SetDefault setDefault = smimeInfo.setDefault("メールアドレス", "送信者メールアドレス","SmimeInfoのID");
    
     setDefault.execute();
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信者メールアドレス}/smimeInfo/{SmimeInfoのID}/setDefault
が実行されます。

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

### 1.3. レスポンスの内容
レスポンスはありません。
失敗した場合は例外が出力されます。

## 2. S/MIME構成を設定
送信元エイリアスのS/MIME構成を設定(アップロード)します。

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

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

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

|メソッド|引数|説明|
|---|---|---|
|setIssuerCn|String|S/MIME証明書の発行元の共通名|
|setIsDefault|Boolean|この設定がユーザーの送信元アドレスのデフォルトであるか|
|setExpiration|Long|証明書の有効期限が切れた時期（エポックミリ秒）|
|setEncryptedKeyPassword|String|暗号化された鍵のパスワード|
|setPkcs12|String|【必須】1つの秘密鍵/公開鍵ペアと証明書チェーンを含むPKCS12形式|

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

#### SmimeInfo
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|SmimeInfoのID|
|getIssuerCn|String|S/MIME証明書の発行元の共通名|
|getIsDefault|Boolean|この設定がユーザーの送信元アドレスのデフォルトであるか|
|getExpiration|Long|証明書の有効期限が切れた時期（エポックミリ秒）|
|getEncryptedKeyPassword|String|暗号化された鍵のパスワード|
|getPem|String|PEM 形式のX509で連結された証明書文字列|
|getPkcs12|String|1つの秘密鍵/公開鍵ペアと証明書チェーンを含むPKCS12形式|

## 3. S/MIME構成を削除
指定した送信元エイリアスのS/MIME構成の設定を削除します。

### 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();
    Gmail.Users.Settings.SendAs.SmimeInfo smimeInfo = sendAs.smimeInfo();
    Gmail.Users.Settings.SendAs.SmimeInfo.Delete delete = smimeInfo.delete("メールアドレス", "送信元メールアドレス", "SmimeInfoのID");
    
    delete.execute();
}
```
#### 3.2.1. HTTPリクエスト
DELETE:　https:\//gmail.googleapis.com/gmail/v1/users/{メールアドレス}/settings/sendAs/{送信元メールアドレス}/smimeInfo/{SmimeInfoのID}
が実行されます。

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

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

### 3.3. レスポンスの内容
レスポンスはありません。
失敗した場合は例外が出力されます。

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