Email Deliveryを使う

# TL;DL
Oracle Cloudでメールを送信する際、[Email Delivery](https://docs.oracle.com/ja-jp/iaas/Content/Email/home.htm) というサービスがある。
これを使うと良さげ。

設定方法は、公式の [チュートリアル(基礎編)](https://oracle-japan.github.io/ocitutorials/intermediates/sending-emails-1/)、[チュートリアル(応用編)](https://oracle-japan.github.io/ocitutorials/intermediates/sending-emails-2/) や、
他の方が書かれている [記事](https://qiita.com/cocotaro0202/items/ebf750173e86065b77ab) がとても詳しいので、まあ詰まることはないだろうと
高を括っていたのだが、実際に設定してみると **少々** 躓いてしまったｗ
自嘲のついでに、自分の環境に構築したときのメモを公開してしまうという試み。

# Email Deliveryの設定
## 準備（OCI外部リソースの設計）
- 送信用のメールアドレス
  たとえば`hogegegege.net` というドメインを（[お名前.com](https://www.onamae.com/) とかで）持っていたとして、
  `no-reply@sub.hogegegege.net`ってアドレスで、メールを送信(From:)したいケース。
  - ドメイン（or サブドメ）
    新規をドメインを準備できんかったので、たまたま持ってたドメインのサブドメを使う。
    たとえば、`sub.hogegegege.net`とか。
  - アカウント
    送信したメールに返信をされても、おそらくdovecotなりを建てないと受け取れない...
    それが伝わるようなアカウント名にしておくと良さそう。
    たとえば、`no-reply`とか。
## 設定（OCIリソース＋DNSレコード追加）
### 1. SMTP資格証明
   [このあたり](https://oracle-japan.github.io/ocitutorials/intermediates/sending-emails-1/#2-smtp資格証明の生成)を見ながら、メール送信時にクライアントアプリ側で指定する認証情報を作成。
   - SMTPのユーザー名
   - パスワード（取り扱いに注意）
### 2. ドメイン（or サブドメ）の登録
   開発者サービス → 電子メール配信 → 電子メール・ドメイン → 『電子メール・ドメインの作成』と進める
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870464/456773d4-589e-5af2-9f21-3151b2b51522.png)
### 3. 承認済送信者の登録
   開発者サービス → 電子メール配信 → 承認済送信者 → 『承認済送信者の作成』と進める
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870464/346562b6-bcf2-1091-732a-5c2c64f889d8.png)
### 4. SPF用のTXTレコード
   東京だと、多分`v=spf1 include:ap.rp.oracleemaildelivery.com ~all` ※[ソース](https://oracle-japan.github.io/ocitutorials/intermediates/sending-emails-2/#1-spfの設定)
   親ドメイン`hogegegege.net`のDNSに、TXTレコードを入れる。
   数分でレコードが伝搬されるはず。以下、確認方法のサンプル。
```
PS C:\Users\xxxxxxxx> nslookup -type=txt sub.hogegegege.net 8.8.8.8
サーバー:  dns.google
Address:  8.8.8.8

権限のない回答:
sub.hogegegege.net      text = "v=spf1 include:ap.rp.oracleemaildelivery.com ~all"
PS C:\Users\xxxxxxxx>
```
### 5. DKIM用のCNAMEレコード
   開発者サービス → 電子メール配信 → 電子メール・ドメイン
   → 『sub.hogegegege.net (さっき登録したドメイン)』 → 『DKIMの追加』と進めて、
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1870464/29667609-69a2-40d2-10fd-2852702f57e6.png)
   適当に「DKIMセレクタ」を入力（図の dkim-sub-000）して、CNAMEのレコード/値を作成。
   ドメイン`hogegegege.net`のDNSに、CNAMEレコードを入れる。

   ・DNSに設定するレコードの情報（↑で作成したもの）
   　　レコード：（例）dkim-sub-000._domainkey.sub.hogegegege.net.
   　　値　　　：（例）dkim-sub-000.sub.hogegegege.net.dkim.nrt1.oracleemaildelivery.com

   数分でレコードが伝搬されるはず。以下、確認方法のサンプル。
```
PS C:\Users\xxxxxxxx> nslookup -type=cname dkim-sub-000._domainkey.sub.hogegegege.net 8.8.8.8 
サーバー:  dns.google
Address:  8.8.8.8

権限のない回答:
dkim-sub-000._domainkey.sub.hogegegege.net      canonical name = dkim-sub-000.sub.hogegegege.net.dkim.nrt1.oracleemaildelivery.com
PS C:\Users\xxxxxxxx> 
```
### 6. ポリシー
   アイデンティティとセキュリティ → ポリシー → 『ポリシーの作成』と進めて、
   メールアプリからでも、Email Deliveryを使えるようにポリシーを追加する。
   `Allow グループ名 to use email-family in compartment コンパートメント名`
   詳細は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/Email/Tasks/generatesmtpcredentials.htm)。

   自分は、SMTP資格での認証のみでメールを送信できるようにしたかったので 
   グループ名に`any-user`を設定して、エラーなくメールを送信することができました。
   お仕事環境などの場合のポリシー設計は、セキュリティ責任者さんとお話をして決めましょう。
   ※コンパートメントの指定方法なども考え方は一緒です

# メール送信テスト
## [Swaks](https://docs.oracle.com/ja-jp/iaas/Content/Email/Reference/swaks.htm)を使う
Perl製のお手軽メール・クライアント。実態はただのPerlスクリプト？らしい。
コマンドでメールを送信できたり、プロトコル・ログを確認することもできるようで、
このプロトコル・ログは、メールが送信できない場合のデバック用途として使えるもよう。

が、長くなるので [別の記事(Linux版, ](https://qiita.com/viva1000/private/29d6dccd19904461c1aa)[Win版)](https://qiita.com/viva1000/items/6299ceb07ab32084bfe0) で整理しますー