OCI電子メール配信サービスの概要

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

注目ポイント：
- OCI Email DeliveryとAWSの類似サービス(SES)の比較
- メール送信のクイックスタートガイド（わかりやすい手順付き）
- DKIMとSPFの設定方法（サービス制限の引き上げに必要）

# 初めに
今回は、OCI電子メール配信サービス(<strong>OCI Email Delivery</strong>)の概要を紹介したいと思います。

__トピック__
[OCI Email Deliveryとは](#oci-email-deliveryとは)
[OCI Email Delivery vs AWS SES](#oci-email-delivery-vs-aws-ses)
[OCI Email Deliveryでメールを送信するクイック・スタート](#oci-email-deliveryでメールを送信するクイックスタート) (ステップ・バイ・ステップのハンズオン・デモです。)

# OCI Email Deliveryとは
「電子メール配信を使用する場合、これが<strong>アウトバウンド電子メール・サーバー</strong>になります。既存の電子メール・サーバーがある場合は、これを<strong>保持して、電子メール配信を介して送信する</strong>ように構成できます。」 -- OCIドキュメントより

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2a527c6b-1d29-3b9e-3116-dab63c7c789f.png)
OCI電子メール配信とは何ですかと聞かれたら、上記の説明と図がよく解説してくれますので、そのまま引用しました。（重要かつ理解しやすいと思います。）

__OCI Email Deliveryについて知っておくべきこと__

|項目|内容| 
|:--|:--|
|送信方法|<font color=blue>SMTP</font> (のみ)|
|SMTP Auth|<font color=blue>Plain</font> (のみ)|
|添付ファイルのサポート|<font color=blue>Yes</font>|
|<strong>DKIM</strong>(DomainKeys Identified Mail)のサポート|<font color=blue>Yes</font>|
|<strong>SPF</strong>(Sender Policy Framework)のサポート|<font color=blue>Yes</font>|
|メールの一括送信|Yes (プログラムで)|
|パブリック・インターネットを経由せずにメールを送信<br>(<strong>Service Gateway</strong>を経由)|<font color=blue>Yes</font>|
|SDKの提供|Yes|
|Autonomous Databaseからの送信|Yes|
|利用可能リージョン|全てのリージョン|

__サービス制限__ ([リンク](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/servicelimits.htm#Email_Delivery_Limits))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/47e9a7a5-f762-3520-b2f1-ebf27f03bc90.png)

:::note
電子メール配信では、<font color=blue>2MB</font>までのメッセージ(メッセージ・ヘッダー、本文およびアタッチメントを含む)がサポートされています。送信ドメインに<strong>SPFおよびDKIM</strong>を設定してある場合は、要件に基づいて、この制限の引上げをリクエストできます。リクエストできる最大サイズは<font color=blue>60MB</font>です。
:::

現在利用中のサイズ制限値は、OCIコンソールから確認できます。
ガバナンスと管理→テナンシ管理→制限、割当ておよび使用状況
サービス：Email Delivery

# OCI Email Delivery vs AWS SES
__他のクラウド・プロバイダー__
<font color=orange>AWS</font>が、SES(<strong>Simple Email Service</strong>というメール・サービスを提供しています。このブログの最終更新日（2025年2月）まで、AzureとGCPがまだネイティブのメール・サービスを提供していません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/94f0af52-3c1f-b42f-53f1-603823655be6.png)

__価格比較__
<strong>OCI</strong> Email Deliveryの価格は、<font color=orange>AWS SES</font>より安価で、見積もりも容易です。
OCIでは、添付ファイルに<strong>追加費用がかかりません</strong>。価格は以下の通りです。

||OCI Email Delivery|AWS SES| 
|:--|:--|:--|
|メール送信|送信した数で請求する|送信した数で請求する|
|添付ファイルの追加費用|<font color=blue>なし</font>|あり|
|メール受信|N/A|有料|
|価格|[LINK](https://www.oracle.com/cloud/networking/email-delivery/)|[LINK](https://aws.amazon.com/ses/pricing/)|

__OCI Email Deliveryの価格__
価格設定は非常にシンプルで、コストを見積もるのは簡単です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3703e9b0-8c03-d41d-c06f-16a4d2fbc8bd.png)
※、最初の3100通は無料枠です。

__AWS SESの価格__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3b362364-713a-85b7-5bfa-dc552455b71d.png)
AWS SESは、メールと添付ファイルの送信に対して個別に課金します。送信元（EC2またはその他のメール・クライアント）の場所により、料金が異なります。送信費用を見積もる時、ちょっと複雑になります。

# OCI Email Deliveryでメールを送信するクイック・スタート
__ステップ__

|No.|タスク|OCI ユーザー|コメント|
|:--:|:--|:--|:--|
|1|[SMTP資格証明の作成](#1-smtp資格証明の作成)|電子メール管理者||
|2|[ポリシーの作成](#2-ポリシーの作成)|テナンシ管理者||
|3|[電子メール・ドメインとDKIMの作成](#3-電子メールドメインとdkimの作成オプション)|電子メール管理者|オプション|
|4|[承認済送信者の作成](#4-承認済送信者の作成)|電子メール管理者||
|5|[SPFの設定](#5-spfの設定オプション)|電子メール管理者|オプション|
|6|[SMTP接続の設定](#6-smtp接続の設定)|電子メール管理者|
|7|[テスト電子メールを送信](#7-テスト電子メールを送信)|必要なし|VMまたはアプリから実行|

注意:
- ステップ<font color=blue>3と5</font>はオプションであり、必須ではありませんが、それらを実行することを勧めします。

- テナンシ管理者としてステップ<font color=blue>2</font>を実行する必要があります。ほかのステップについては、テナンシ管理者から権限が付与されているユーザー（例：電子メール管理者）で実行してください。

- あなたは、テナンシ管理者であり、軽い検証を行いたい（新規ユーザーやグループを作成したくない）場合は、ステップ<font color=blue>2</font>をスキップしてもよいです。テナンシ管理者としてほかのステップを実施すればOKです。

__検証環境__

|項目|内容|コメント|
|:--|:--|:--|
|OCIリージョン|東京|すべてのOCIリージョンで利用できます。|
|ユーザー名|Email_Manager|事前に作成してください（ここでは省略しました）。|
|グループ名|Email_Group|事前に作成してください（ここでは省略しました）。|
|ユーザー・タイプ|IAM Identity Domain|従来のIDCSまたはIAMユーザーにも適用します。|
|Computeインスタンス|Oracle Linux 8|
|メール送信用ソフト|mailx|手動でインストール|

# 1. SMTP資格証明の作成
ユーザー・タイプは、<strong>アイデンティティ・ドメイン</strong>の場合：
プロファイル・アイコン（右上）-> My profile -> SMTP credentials -> Generate credentials
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ae5608fc-4790-6353-5a3a-e71bf3035f69.png", width="500">

従来のIDCS/IAMユーザーの場合、入り口は少し違います。
Identity -> Users -> User Details -> SMTP Credentials
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ea4cfb0b-578c-bed2-cde9-b0a991d0c6a8.png)

次のポップアップ画面で、説明を入力し、「資格情報の生成」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d96b260e-7bec-94d9-46a2-8041716455fd.png", width="500">

「コピー」をクリックし、パスワードを保存してください。<font color=blue>パスワードは再度表示されません</font>。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/795fec66-9e43-5d67-fd57-deb5ee1c46e9.png", width="500">

生成後、ユーザー名の上にマウスを置き、<strong>OCID</strong>をコピーします。ステップ6でパスワードと共に使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b70a2640-775d-1029-5655-c5d2e478cc6e.png)
１個のユーザーに対し、<font color=blue>最大2つ</font>のSMTP資格証明が作成できます。
# 2. ポリシーの作成
このステップを完了するには、<strong>テナンシ管理者</strong>としてログインしてください。
ユーザー「Email_Manager」とグループ「Email_Group」を用意しておき、「Email_Manager」を「Email_Group」に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9890c66e-aacc-d25f-ea3b-b34c1117042c.png)

ポリシー名: Email_Delivery_Policy
ステートメント: Allow group Email_Group to <font color=blue>manage email-family</font> in compartment PoC
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/34d6b4d1-9a81-af8b-2a0a-942c96dd32de.png", width="500">

# 3. 電子メール・ドメインとDKIMの作成（オプション）
DomainKeys Identified Mail(<strong>DKIM</strong>)は、メール転送エージェント(MTA)によるメッセージのソースと内容の検証を可能にする認証フレームワークです。DKIMにより、署名者はドメインの電子メール・メッセージに暗号を使用して署名し、信頼性の責任を主張できます。

__ステップ__
[3-1. 電子メール・ドメインの作成](#3-1-電子メールドメインの作成)
[3-2. DKIMの作成](#3-2-dkimの作成)
[3-3. DNSゾーンの作成](#3-3-dnsゾーンの作成)
[3-4. DNS設定にDKIMレコードを追加](#3-4-dns設定にdkimレコードを追加)

## 3-1. 電子メール・ドメインの作成
Email Delivery -> Email Domains -> Create Email Domain
電子メール・ドメイン名を入力し、「電子メール・ドメインの作成」ボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a16213c8-5173-7e3e-0a20-5f4e3c3f40da.png)

## 3-2. DKIMの作成
電子メール・ドメインがアクティブになったら、「Add DKIM」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4e8dd25e-3ffb-b5d1-4c05-430ce5d2c718.png)

「DKIM Selector」を入力し、「<strong>Generate DKIM Record</strong>」ボタンをクリックします。
「DKIM Selector」のフォーマット: `<prefix>-<shortregioncode>-<yyyymmdd>`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/877cf173-e65a-d010-c70b-431ddbacedc2.png)

CNAME名とCNAME値をコピーし、「<strong>Create DKIM</strong>」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/26ae1b13-c569-8c25-9c4a-d011c09801c0.png)

DKIMレコード作成後、「DKIM Signing Status」の状態は「<font color=blue>Pending DNS</font>」と表示されます。それで、DNS設定にCNAMEレコードを追加す必要があります。

## 3-3. DNSゾーンの作成
DNSゾーンが存在しない場合は、まずDNSゾーンの作成は必要です。
Networking -> DNS Management -> Zones
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/879bc2a7-f2ff-0054-9e8f-94d6f17857b2.png", width="600">
ゾーン名として電子メール・ドメイン名を入力し、「作成」ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ea6e7979-97f2-7119-963d-f7b85d2e0030.png", width="600">

## 3-4. DNS設定にDKIMレコードを追加
Networking -> DNS Management -> Zones -> Domain Name -> Records -> Add Record
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/63ae37ad-3742-d7bd-5a6c-fb94b928cd4d.png)

CNAMEレコードとCNAME値を入力し、「Submit」ボタンをクリックします。

|項目|説明|値|
|:--|:--|:--|
|Name|CNAME Record|`liu-nrt-20220331._domainkey.<email_domain_name>`|
|Target|CNAME Value|`liu-nrt-20220331.<email_domain_name>.dkim.nrt1.oracleemaildelivery.com`|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2b251b96-da7d-93f2-0014-8aa021ec616e.png)

レコードが作成されたら、「Publish Changes」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a2f8767e-cffd-5420-0f2b-d0e7e92a14e6.png)
 
DNSレコードを公開した後、「DKIM Signing Status」が「<font color=blue>Active</font>」になるまで時間がかかり、数分間から数時間以上の場合があります（私のテスト用ドメインの場合、およそ１日間かかりました）。ステータスが「Active」になったら、OCIコンソールから確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7d828628-a9c6-06de-3e49-c17dc5639830.png)

:::note
MOSドキュメントの記載により、DNSレコードを追加した後、DKIMステータスが有効になるまで、<strong>24時間</strong>かかる場合があります。
:::

# 4. 承認済送信者の作成
承認済送信者を作成するには、2つの入り口があります。電子メール・ドメインの作成をスキップした場合（ステップ3）、入口は以下です。
Email Delivery -> Approved Senders
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2b452bba-e6c9-2412-ebc4-e50b9f7196f3.png)

電子メール・ドメインとDKIMは作成済の場合、入口は以下です。
Email Delivery -> <strong>Email Domains</strong> -> Approved Senders
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/382bc76d-8983-fc12-cba6-68adfc02a506.png", width="600">

送信者のメールアドレスを入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c61aa15b-7f7e-2c33-b54a-22ab0ec978ca.png", width="500">

<strong>ベスト・プラクティス</strong>: 承認済送信者を<strong>ルート・コンパートメント</strong>で作成しないでください。承認済送信者がルート・コンパートメントに存在する場合、テナント全体で承認済送信者を管理するポリシーを作成する必要があります。

# 5. SPFの設定（オプション）
「承認済送信者」が作成されたら、3ドットのメニューをクリックして「SPFの表示」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/47076873-ded4-494d-a1af-d25bc16e4ca4.png)

DNSにSPFレコードがないことを示しています。それで、DNSにSPFレコードを追加する必要があります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6773258e-4968-85ad-f75c-d5eae1760542.png", width="500">

Networking -> DNS Management -> Zones -> Domain Name -> Records
レコード・タイプ: <font color=blue>TXT</font>
テキスト: 送信場所によって異なります（この例ではを"Asia/Pacific"使用しています）。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9aaae945-d5cd-b5da-2925-fac995d85cfa.png", width="500">

レコードを追加した後、変更を公開することを忘れないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5b953c4d-09d3-1836-5aee-8612b2cdf8d5.png)

公開後、「SPF Configured」の状態が「Yes」に変わりました。（私の場合、2〜3分しかかかりませんでした。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/48491af8-7897-86c3-58c5-ceaccfbdac31.png)

3ドットのメニューからもう一度「SPFの表示」をクリックすると、メッセージが次のように変更されていることがわかります。これは予想どおりです。
`SPF Record Exists for this Approved Sender`

# 6. SMTP接続の設定
Email Delivery -> Configuration
以下のようにSMTP送信情報を確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/351f9347-31f3-cbdf-19be-e9c9fe25aad9.png)

メールの送信元（Computeインスタンス）にログインする必要があります。ここでは、Oracle Linux8 VMを使用しています。mailxはプリインストールされていないので、次のコマンドで手動でインストールしました。
`sudo yum install mailx -y`

インストール後、次のように`/home/opc/.mailrc`を編集します。
```ruby
[opc@linux8 ~]$ pwd
/home/opc
[opc@linux8 ~]$ cat .mailrc
set smtp-use-starttls
set smtp=smtp.email.ap-tokyo-1.oci.oraclecloud.com:587
set smtp-auth=plain
set smtp-auth-user=<smtp_user_ocid>
set smtp-auth-password=<password>
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set from=<sender_email_address>
[opc@linux8 ~]$
```
|項目|内容|コメント|
|:--|:--|:--|
|smtp|smtp.email.ap-tokyo-1.oci.oraclecloud.com|パブリック・エンドポイント|
|smtp-auth|plain|SMTP Plainのみをサポート|
|smtp-auth-user|SMTP資格証明ユーザのOCID|ステップ1で作成|
|smtp-auth-password|SMTP資格証明のパスワード|ステップ1で作成|
|from|「承認済送信者」のメールアドレス|ステップ4で設定|

# 7. テスト電子メールを送信
メール送信用コマンド:
`echo "This is a test for OCI Email Delivery with DKIM" | mailx -s "Test for OCI Email Delivery" <Recipient_Email_Address>`

```
[opc@linux8 ~]$ echo "This is a test for OCI Email Delivery with DKIM" | mailx -s "Test for OCI Email Delivery" <Recipient_Email_Address>
[opc@linux8 ~]$
```
受信者には次のようなメールが届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/baf0b3c3-f26d-bf5a-4d02-965bfe51ecec.png)

__まとめ__
上記は、各機能をカバーしているステップ・バイ・ステップのガイドです。もし軽い検証だけをしたい場合は、ステップ<font color=blue>1、4、6、および7の4つのステップのみ</font>でOKです。これは非常に簡単です。 

以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[Autonomous DBでOCIメール配信サービスを使用してメールを送信](https://qiita.com/liu-wei/items/55093572803ab77b2935)
[OCI Computeにログインする時にメール通知を送信する方法](https://qiita.com/liu-wei/items/5036f3fbdd4e098fa997)

----
# 参考ドキュメント

[電子メール配信の開始](https://docs.oracle.com/ja-jp/iaas/Content/Email/Reference/gettingstarted.htm#permissions)
[OCI Email Delivery FAQs](https://www.oracle.com/jp/cloud/networking/email-delivery/faq/)
[DKIMの管理](https://docs.oracle.com/ja-jp/iaas/Content/Email/Tasks/configuredkim.htm)
[SPFの構成](https://docs.oracle.com/ja-jp/iaas/Content/Email/Tasks/configurespf.htm)

__MOS Doc__
OCI Email Delivery - How to Send an Email With an Attachment Larger Than 300 KB ([Doc ID 3001608.1](https://support.oracle.com/knowledge/Oracle%20Cloud/3001608_1.html))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8a7ba206-6361-fe9d-6d90-1ea8c61b6456.png)

OCI Email Delivery - How Long Domain Keys Identified mail (DKIM) Signature To Become Active ([Doc ID 3000698.1](https://support.oracle.com/knowledge/Oracle%20Cloud/3000698_1.html))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ecc33789-7b16-4ca0-8d0c-d5b1469f478a.png)