本記事は、Oracle Cloud Infrastructure Advent Calendar 2021 の Day 22 として書いています。
こんにちは。a.nakamuraです。
今回はEmail Delivery(電子メール配信サービス)を利用し、メール配信をする手順をまとめました。
目次
参考
[チュートリアル]
Email Deliveryを利用した外部へのメール送信(その1 配信環境構築編)
Email Deliveryを利用した外部へのメール送信(その2 メール送信編)
[技術資料]
OCI技術資料 : Email Deliveryサービス 概要
[公式ドキュメント]
Email Deliveryとは
- 迅速・高信頼性・低コストなメール配信サービス
- 送信メール1,000件あたり¥10.20
- 高品質なメールを配信するための豊富な機能
- SMTP認証、SPF認証、DKIM認証、送信抑制リストの自動管理等が利用可能
- アプリケーションからの容易な呼び出し
- 各リージョンのSMTPエンドポイントが利用可能
設定内容
- 東京リージョンにて設定
- Linuxサーバ(Oracle Linux 8.2)にてmailxコマンドを実行
- Email Deliveryを介してメールが送信できることを確認する
- 本手順では 既存のOCI DNSゾーン(ntest.tokyo)を利用
SMTP認証を取得
1.左上のハンバーガーアイコン → [アイデンティティとセキュリティ] → [ユーザ] → [対象のユーザ] → ユーザ詳細画面の[SMTP証明]→[SMTP資格証明の生成]を選択します。
2.[SMTP資格証明の生成画面]で説明を入力 → [SMTP資格証明の生成] → ユーザー名とパスワードが表示されるので控えておく。
※パスワードは再度表示不可のため必ずメモをしてください
承認済送信者を作成
Email Deliveryで承認済送信者(Fromメールアドレス)を作成します。本手順ではmail@ntest.tokyoにて設定します。
1.左上のハンバーガーアイコン → [開発者サービス] → [電子メール配信] → [承認済送信者] → [承認済送信者の作成] を選択します。
2.[承認済送信者の作成]画面 で[電子メール・アドレス]を入力します。
3.電子メール・アドレスが登録されます。
SPF認証の設定
1.作成した電子メール・アドレスの[三点リーダーアイコン] → [SPFの表示]を選択します。
2.[SPFの管理]画面が表示されるのでSPFレコードをメモしておきます。今回は東京リージョンで作成しているので、アジア太平洋(v=spf1 include:ap.rp.oracleemaildelivery.com ~all)が対象です。
3.左上のハンバーガーアイコン → [ネットワーキング] → [ゾーン] → [対象のDNSゾーン] → [レコード] → [レコードの追加]を選択します。
4.以下情報を入力し、[送信]を選択します。
レコード型:TXT - テキスト
TEXT(テキスト):v=spf1 include:ap.rp.oracleemaildelivery.com ~all
※2で確認したSPF値
5.レコード追加後、DNSゾーン画面で[変更の公開]を選択して変更を反映します。
メール送信する
1.対象のサーバにログインします。
2.メール環境の定義ファイルを作成します。
$ vim ~/.mailrc
#smtp config
set smtp-use-starttls
set smtp=smtp.email.ap-tokyo-1.oci.oraclecloud.com:587
set smtp-auth=plain
set smtp-auth-user=<SMTP認証ユーザーのOCID>
set smtp-auth-password=<SMTP認証ユーザのパスワード>
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set from="<承認済メール送信者>"
3.mailxコマンドにてテストメール送信を送信してみます
$ echo "Test Mail" | mailx -s "test mail" <送信先メールアドレス>
4.gmail宛に送信し、無事受信できました
おまけ
DKIM署名
SPF認証にてメールを無事に受信できましたが、さらにDKIM認証を設定することが可能です。
DKIMは電子メールにおける送信元ドメインの認証をする技術です。
1.左上のハンバーガーアイコン → [開発者サービス] → [電子メール配信] → [電子メール・ドメイン] → [電子メール・ドメインの作成] を選択します
2.[電子メール・ドメインの作成]画面でドメインを入力します
3.作成した[電子メール・ドメインの詳細画面]に移動し、[DKIMの追加]を選択します
4.[DKIMの作成]画面で[DKIMセレクタ]を入力し、[DKIMレコードの生成]を選択します
ステップ3に[CNAMEレコード]と[CNAME値]が表示されるのでDNSレコードに追加、反映します
レコード反映後、[DKIMの作成]を選択します
5.DKIMが作成されるとステータスがアクティブになります
※ アクティブになるまで時間がかかりました。。
DKIM署名後、受信したgmailの署名元にドメインが表示されるようになりました
Error in certificate: Peer's certificate issuer is not recognized.
mailxコマンド実行時にメール送信は可能ですが、[Error in certificate: Peer's certificate issuer is not recognized.]とエラーが出ることがあり対応方法を調べてみました。
Mailxと電子メール配信の統合 のトラブルシューティング、
Amazon SES + mailx で「Error in certificate: Peer's certificate issuer is not recognized.」が出た時の対処法 を参考にしました。
1. エラー内容確認
$ echo "Test Mail" | mailx -s "test mail" -v <送信先メールアドレス>
220 Ready to start TLS
Error in certificate: Peer's certificate issuer is not recognized.
Comparing DNS name: "smtp.email.ap-tokyo-1.oci.oraclecloud.com"
SSL parameters: cipher=AES-128-GCM, keysize=128, secretkeysize=128,
issuer=CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US
subject=CN=smtp.email.ap-tokyo-1.oci.oraclecloud.com,O=Oracle Corporation,L=Redwood City,ST=California,C=US
証明書のエラー:ピアの証明書発行者が認識されません。と言われています。
2.証明書のデータベースを確認する
$ sudo certutil -L -d /etc/pki/nssdb/
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Certificate Nickname の下に表示されない → 証明書がない状態
3. 証明書チェーンを確認する
$ echo | openssl s_client -starttls smtp -crlf -connect smtp.email.ap-tokyo-1.oci.oraclecloud.com:587 -showcerts
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global G2 TLS RSA SHA256 2020 CA1
verify return:1
depth=0 C = US, ST = California, L = Redwood City, O = Oracle Corporation, CN = smtp.email.ap-tokyo-1.oci.oraclecloud.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Oracle Corporation/CN=smtp.email.ap-tokyo-1.oci.oraclecloud.com
i:/C=US/O=DigiCert Inc/CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
1 s:/C=US/O=DigiCert Inc/CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root G2
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Redwood City/O=Oracle Corporation/CN=smtp.email.ap-tokyo-1.oci.oraclecloud.com
issuer=/C=US/O=DigiCert Inc/CN=DigiCert Global G2 TLS RSA SHA256 2020 CA1
---
Server certificateの下に情報がないため、
ルート証明書(depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1)が足りてないことがわかりました
4.直接ルート証明証明書をインポートする
ルート証明書(DigiCertGlobalRootG2)をダウンロードします
$ sudo -i
$ cd /etc/pki/nssdb
$ wget https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
5.入手したルート証明書をインポートします
$ certutil -A -n "DigiCertGlobalRootG2" -t "C,," -d /etc/pki/nssdb/ -i DigiCertGlobalRootG2.crt.pem -a
$ certutil -L -d /etc/pki/nssdb/
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
DigiCertGlobalRootG2 C,,
DigiCertGlobalRootG2が登録されました
6.mailxコマンドを再度実行し、エラーがなくなったことを確認できました
おわりに
以上、Email Deliveryを使用する手順でした。
個人的につまづいたところがありましたので共有させていただきました。。
本記事がお役に立てば幸いです。