[OCI] Email Delivery を使って初めてメール送信してみた

Oracle Cloud Infrastructure(OCI)のEmail Delivery(電子メール配信)サービスを、巻末のEmail Deliveryチュートリアルの手順にそって初めて試してみました。

# OCI Email Delivery(電子メール配信)とは

- 迅速・高信頼性・低コストなメール配信サービスです。
  - メール受信機能は含みません。
- 高品質なメールを配信するための機能
- 既存SMTPサーバやアプリケーションサーバからSMTPエンドポイントを指定することでメール配信が可能です。
- **SPF(Sender Policy Framework)認証**に対応
  - **SPF認証**：**電子メール受信者が電子メールのなりすましを検出するために使用されます。**SPFを使用すると、電子メール受信者は、インターネット・プロトコル(IP)がそのドメインへの送信を明示的に認可されているかどうかを確認できます。SPFは、ドメインのDNSレコードに特別なTXTレコードを公開することによって実装されます。[OCIドキュメント-電子メール配信サービスの概要から引用(巻末の参考URLに記載)]
  - **SPFの仕組み(下図)**： [一般財団法人インターネット協会-技術解説から引用(巻末の参考URLに記載)]
<div align="center">
<img width="400" alt="image-20211105093105036.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/dd6768cf-1ef5-014e-e9d6-2809ed17c087.png">

# お試し環境
## 前提

- OCIのユーザー登録がされていること(IAMユーザーかIDCSユーザーのいずれか)
  - 未登録の場合は巻末チュートリアルのガイドにそってユーザーを作成できます。
- メールを送信するための仮想マシン(コンピュート・インスタンス)をOCIに構築済み
- SPF認証に対応するためDNSドメインを利用できること

## メール配信の流れ

1. メール送信するためのコンピュート・インスタンスにターミナル(例) Windows PowerShell)から接続
2. メール配信コマンドを実行
3. Email Delivery（電子メール配信）を介して、メール受信者にメールが届くかを確認
![image-20211104152137982.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/2cbe85da-d952-0a66-377f-e9c36e27ea2e.png)

# OCIでの設定

以下の設定をおこないます。

1. ユーザーのSMTP資格証明の取得
2. Email Delivery（電子メール配信）の設定
3. SPF認証の設定



## 1. ユーザーのSMTP資格証明の取得

OCIにサインイン後、左上のナビゲーションメニューから**[アイデンティティ] - [ユーザー]**をクリックし、**ユーザー** を選択します。チュートリアルでは、IAMユーザーを新規作成していますが、IDCSユーザーでも代替することが可能です。今回は筆者の都合上、既存のIDCSユーザーを使用しています。

チュートリアルではセキュリティの観点よりメール送信専用にユーザーを作成して使用することを推奨しています。実際に本番利用する場合には、送信専用のユーザーを作成して設定してください。
![image-20211104154400864.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/b072593f-5cfc-1519-abe7-3df75860fad8.png)
Email Deliveryを利用してメールを送信するには、ユーザーのSMTP資格証明が必要です。リソースの**[SMTP資格証明]**を選択し、**SMTP資格証明の生成** をクリックします。
![image-20211104155453950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6a036165-d728-b3e4-9bd4-bfc98b9f358b.png)
[SMTP資格証明の生成]画面が表示されます。[説明]に適宜文字入力した後に、**[SMTP資格証明の生成]**をクリックします。
![image-20211104155716131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3446b44f-6c5d-48b2-63e2-948a27f1819e.png)
SMTP資格証明の**ユーザー名とパスワード**情報が生成されるので、コピーして保持しておきます。
![image-20211104160116763.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/57dcebb1-c83d-133e-53b4-6e6fa2447df8.png)
コピーすると、例えばこんな感じです。後でメール送信する際に使います。

```
ユーザー名：ocid1.user.oc1..aaaaaaaamkql3kgy7evqf6aymsdm3cgvq53oojpwiylnqkvzxurjb5dbzyka@ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5xxx.4n.com
パスワード：y!MmDa1MJk0]$DwqVXXX
```

チュートリアルでは、ユーザーをグループへ追加する処置をしていますが、今回はスキップしてます。


## 2. Email Delivery(電子メール配信)の設定

次に、Email Delivery(電子メール送信)を使ってメール送信するために、メール送信を許可するメールアドレスを登録します。

左上のナビゲーションメニューから**[開発者サービス] - [電子メール配信]**から、**[承認済送信者]**を選択し、**承認済送信者の作成** をクリックします。
![image-20211104161843768.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/7feceae1-2a74-8a09-e734-39d5cab7ed88.png)
**承認済送信者**の電子メールアドレスを入力します。
![image-20211104162109376.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/f791b1ed-45d8-6dd3-36f5-e12fdf761f8b.png)
承認済送信者の電子メールアドレス（例) mail@cocotaro.com）が登録されました。
![image-20211104162247788.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/b3e88351-6512-a748-e40e-35c20e9fc8cc.png)

## 3. SPF認証の設定

前述のSPF認証のための設定をおこないます。SPFレコードを取得して、ドメインに登録します。右３点マークをクリックし**SFP表示**を選択します。
![image-20211104162613174.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3437d9a7-03aa-5422-aed3-91e377a7db3b.png)
**SPFの管理** 画面が表示されるので、SFPレコードをコピーします。今回はアジア太平洋を選択。
![image-20211104162729244.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a897d71c-350d-cb88-341d-343c882a4eeb.png)
**[ネットワーキング] - [DNS管理] - [ゾーン]**をクリックし、**DNSゾーン** を表示します。左下 リソース の**レコード** を選択し、**レコードの追加** をクリックします。
![image-20211104162849213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3083513e-bc7d-3ee9-5f88-cfdef33fcb57.png)
**レコードの追加** 画面から、**SPFレコード**を入力します。
![image-20211104163022979.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/d3cd0d90-e411-f96d-8ba9-0c6e3d7b9af0.png)
**[レコード型]** **TXT-テキスト**を選択します。
**[TEXT（テキスト）]** **SPFレコード**を入力します。
**送信** をクリックし、続けて**変更を公開** します。
![image-20211104163129277.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/315ecd6b-7957-6d9c-4c36-bb2377838fba.png)
**確認** 画面が表示されるので、確認後、**変更の公開** をクリックし変更を反映させます。
![image-20211104163211075.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6224f148-0c17-ed96-1a87-0038e89b4c5b.png)
右上部に **更新が公開されました** メッセージが表示されました。
![image-20211104163613601.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/461970e9-36c7-115a-d920-3224287ce285.png)
以上でOCIでの設定作業は終了です。

# メール送信側の準備

メール送信用にOCIにコンピュート・インスタンスを作成します。チュートリアルにLinux環境と、Windows環境からのメール送信について記載がありますが、こちらでは以下のLinux環境を準備します。

## 前提
- OS：Oracle Linux 7.9 (OCIコンピュート・インスタンス)
- メールコマンド：mailx

Oracle Linux でインスタンスを作成しました。
![image-20211105173605372.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/b23c9847-8b98-7a84-2372-c0400c29422f.png)
インスタンスに接続し、OS標準で用意されている **mailx** コマンドを利用するために、ユーザーホームディレクトリの **.mailrc** （例) opcユーザーの場合：/home/opc/.mailrc）を編集します。



インスタンに接続（例) Windows10 PowerShell から接続）し **.mailrc** を編集します。

```
ssh -i ~/.ssh/id_rsa opc@150.230.61.XXX
[opc@mail-delivery01 ~]$
[opc@mail-delivery01 ~]$ vi ~/.mailrc
```


**.mailrc** に以下を追加します。

```
smtp-use-starttls
set smtp=smtp://smtp.email.ap-osaka-1.oci.oraclecloud.com
set smtp-auth=plain
set smtp-auth-user=ocid1.user.oc1..aaaaaaaamkql3kgy7evqf6aymsdm3cgvq53oojpwiylnqkvzxurjb5dbzyka@ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5tkguca.4n.com
set smtp-auth-password=y!MmDa1MJk0]$DwqV#JE
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set from=mail@cocotaro.com
```

#### [補足説明]

set smtp=smtp://smtp.email.ap-osaka-1.oci.oraclecloud.com *<= Email Delivery エンドポイント*
set smtp-auth=plain
set smtp-auth-user=ocid1.user.oc1..aaaaaaaamkql3kgy7evqf6aymsdm3cgvq53oojpwiylnqkvzxurjb5dbzyka@ocid1.tenancy.oc1..aaaaaaaa3mb7wrcy2ls3u3jsy2soq5ck3lc3q4mczitpdaymbuazc5xxx.4n.com *<= SMTP資格証明のユーザー名のOCID*
set smtp-auth-password=y!MmDa1MJk0]$DwqVxxx *<= SMTP資格証明のパスワード*
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set from=mail@cocotaro.com *<= 送信者のメールアドレス（From: アドレス）*



# メール送信確認

メール送信用のコンピュート・インスタンスから mailx コマンドを使ってメールを送信してみます。

コマンド操作としては以下となります。

```
echo "[メール本文]" | mailx -s "[タイトルに表示]" 受信メールアドレス
```

実際にメールを送信してみます。

```
例）
[opc@mail-delivery01 ~]$ echo "こんにちは、Email Delivery でメールを送信します。" | mailx -s "Email Delivery TEST" xxxx.yyyy@oracle.com
```



Office 365 の Outlook で無事メッセージを受け取ることができました！
![image-20211108100025968.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/1a5d72bc-93ec-35e8-72b5-bfc14ce98b9b.png)
補足ですが、Office 365 の Outlook で到着したメールをダブルクリックし、[ファイル] - [情報] - [プロパティ] の [インターネット ヘッダー(H)]情報を参照することが可能です。 
![image-20211108102239933.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6b8755d4-e09b-b55d-4a3d-e370c7f98cef.png)



# 参考URL

[Email Deliveryを利用した外部へのメール送信(その1　配信環境構築編) - Oracle Cloud Infrastructureアドバンスド](https://community.oracle.com/tech/developers/discussion/4474289/email-delivery%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%A4%96%E9%83%A8%E3%81%B8%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1-%E3%81%9D%E3%81%AE1-%E9%85%8D%E4%BF%A1%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E7%B7%A8-oracle-cloud-infrastructure%E3%82%A2%E3%83%89%E3%83%90%E3%83%B3%E3%82%B9%E3%83%89) 

[Email Deliveryを利用した外部へのメール送信(その2　メール送信編) - Oracle Cloud Infrastructureアドバンスド](https://community.oracle.com/tech/developers/discussion/4474293/email-delivery%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E5%A4%96%E9%83%A8%E3%81%B8%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1-%E3%81%9D%E3%81%AE2-%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E7%B7%A8-oracle-cloud-infrastructure%E3%82%A2%E3%83%89%E3%83%90%E3%83%B3%E3%82%B9%E3%83%89)

[電子メール配信サービスの概要](https://docs.oracle.com/ja-jp/iaas/Content/Email/Concepts/overview.htm)

[一般財団法人インターネット協会-技術解説](http://salt.iajapan.org/wpmu/anti_spam/admin/tech/explanation/)