TL;DL
Oracle CloudのEmail Deliveryでメール送信をテストしたくて、
オンラインドキュメントにあったSwaksっていうメール・クライアントを試した。
ドキュメントみて「簡単そう」と思ったんですが、
実際に設定してみると 少々 躓いてしまったw
自嘲のついでに、自分の環境で成功したときのメモを公開してしまうという試み。
Swaksでメール送信
前提
- Email Deliveryの設定が終わっていること ← これが今回のSTMPサーバ
- Swaksは、Oracle Linux 7.9 にインストールして使う
Swaksインストール
失敗 orz
- こちらのドキュメントのとおりにインストールします。
sudo yum install swaks -y
No package swaks available.
Error: Nothing to do
え?何?これ。どういうこと?
パッケージが存在しないと? yum一発でインストールできない?
仕切り直し
ということで、Swaksの公式サイトを見ながらインストールします。
コマンド本体
sudo su -
curl "https://jetmore.org/john/code/swaks/files/swaks-20201014.0/swaks" > /usr/local/bin/swaks
chmod 755 /usr/local/bin/swaks
入れてみてわかったんですが、いわゆるPerlのスクリプトでした。
yumで入ってたら、中身を見る機会はなかったかも
依存モジュール(Perl)
スクリプトだけだと、やりたいことのひとつ(TLS接続)ができない...
Net::SSLeayという、perlモジュールが必要そう。と、いうことで。
sudo su -
yum install perl-Net-SSLeay perl-CPAN -y
cpan install Net::SSLeay
cpanコマンドの実行中に、いろいろ聞かれましたが、全部デフォルト(Enter連打)で。
送信テスト
ワンラーナーです。長いけど。
swaks -tls --pipeline --server 'smtp.email.ap-tokyo-1.oci.oraclecloud.com' --port 587 \
--auth-user 'ocid1.user.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@ocid1.tenancy.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.wm.com' \
--auth-password 'XXXXXXXXXXXXXXXXXXXX' \
--from 'no-reply@sub.hogegegege.net' \
--to '宛先のメアド' \
--header 'Subject: =?UTF-8?B?44CQ44OG44K544OI44CR?= from OCI(Email Delivery)!' \
--body 'email message... TEST\nqwerty\n\n.'
- --serverは、名前のとおりSMTPサーバのアドレス。
ここで公開されてる。Email Deliveryを設定したリージョンを選ぶ。今回は東京。
以下の2つは、SMTP資格証明で作成したものを指定します
- --auth-user に、
SMTPユーザー名
- --auth-passwordは、
SMTPユーザーのパスワード
他は、こんな感じ
- --fromに設定するのは、
Email Deliveryの承認済み送信者で設定したアカウト(メアド) - --headerにメール表題を指定できる。
例は「【テスト】 from OCI(Email Delivery)!」をエンコードしたもの - --bodyは、メール本文をACSIIで。改行は
\n
で。
(日本語のメール本文の指定方法がわからない...)
プロトコル・ログのサンプル
送信成功時のサンプル
=== Trying smtp.email.ap-tokyo-1.oci.oraclecloud.com:587...
=== Connected to smtp.email.ap-tokyo-1.oci.oraclecloud.com.
<- 220 smtp.email.ap-tokyo-1.oci.oraclecloud.com ESMTP smtp-in
-> EHLO **Linuxサーバ名**
<- 250-smtp.email.ap-tokyo-1.oci.oraclecloud.com
<- 250-STARTTLS
<- 250 Ok
-> STARTTLS
<- 220 Ready to start TLS
=== TLS started with cipher TLSv1.2:DHE-RSA-AES256-SHA256:256
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Redwood City/O=Oracle Corporation/CN=smtp.email.ap-tokyo-1.oci.oraclecloud.com"
~> EHLO **Linuxサーバ名**
<~ 250-smtp.email.ap-tokyo-1.oci.oraclecloud.com
<~ 250-PIPELINING
<~ 250-8BITMIME
<~ 250-AUTH PLAIN
<~ 250 Ok
~> AUTH PLAIN AG9reg(中略)KEr8F4= ※ユーザ名とパスワードをBASE64エンコードしたもの
<~ 235 Authentication successful.
~> MAIL FROM:<no-reply@sub.hogegegege.net>
~> RCPT TO:<**宛先のメアド**>
~> DATA
<~ 250 Ok
<~ 250 Ok
<~ 354 End data with <CR><LF>.<CR><LF>
~> Date: Thu, 09 Jun 2022 07:21:04 +0000
~> To: **宛先のメアド**
~> From: no-reply@sub.hogegegege.net
~> Subject: =?UTF-8?B?44CQ44OG44K544OI44CR?= from OCI(Email Delivery)!
~> Message-Id: <20220609072104.024869@**Linuxサーバ名**>
~> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
~>
~> email message... TEST
~> qwerty
~>
~> .
<~ 250 Ok
~> QUIT
<~ 221 Bye <id: 0A000402L46OXWGN>
=== Connection closed with remote host.
送信できない場合
プロトコル・ログから、エラー(SMTP応答コード)の内容を確認して対応しましょう。
私の場合「535 authorization failed」ってエラーに遭遇して、
認証?ユーザー名もパスワードも無問題ですよ?はて?となったんですが、
どうやら、SMTP認証じゃなくOCIのポリシーで引っかかていたようで、
Allow any-user to use email-family in compartment コンパートメント名
って
ポリシーを追加設定して送信できるようになりました...
結局は、気合です。
RFCとか、SMTP応答コードとか
このあたりがとても参考になりました。感謝。