SMTPの素振りに便利なEthereal Email
Ethereal EmailというSMTPの接続やメールの送信を簡単に確認できるサービスの紹介です。Etherealと聞くと「パケットキャプチャのツール?」と思ってしまいますが別物です。
使い方はとても簡単で上記画面の「Create Ethereal Account」を押すと、テンポラリなSMTPのユーザとパスワードが発行されるので、その認証情報を利用してメールを送ります。
送信後、Open Mailboxのボタンを押すと受信したメールの一覧が表示されて、件名をクリックするとメールの内容を確認できます。
宛先は実際に存在するメールアドレスを利用することもできます。メールは飛ばないのでテストにもってこいです。メールのテスト方法は以下のように色々なサービスやツールがありますが、Ethereal Emailはユーザ登録なども不要でかなり手軽に使えます。
以下、送信例です。
Telnet
「素振りに便利」と書いたのですが、残念ながらTelnetは使えません。特に何も考えずにSMTP AUTHで進もうとすると以下のようにSTARTTLSを求められます。
telnet smtp.ethereal.email 587
Trying xxx.xxx.xxx.xxx...
Connected to smtp.ethereal.email.
Escape character is '^]'.
220 smtp.ethereal.email ESMTP Welcome to Ethereal MSA
EHLO localhost
250-smtp.ethereal.email Nice to meet you, FL1-133-202-39-183.tky.mesh.ad.jp
250-PIPELINING
250-8BITMIME
250-SMTPUTF8
250-AUTH LOGIN PLAIN
250 STARTTLS
AUTH LOGIN
538 Error: Must issue a STARTTLS command first
そこでSTARTTLSを最初に打つとコネクションが確立できるのですが、Telnetでは暗号化された通信ができないので次に進めないのです。残念...。
...
STARTTLS
220 Ready to start TLS
EHLO localhost
Connection closed by foreign host.
OpenSSL
Telnetの代わりにOpenSSLが使えます。
openssl s_client -connect smtp.ethereal.email:587 -starttls smtp -ign_eof -crlf
OpenSSLではコマンドの1文字目に"R"が来るとTLSの再接続(RENEGOTIATING)が実行されてしまうので、これを防ぐために-ign_eofオプションをつけました。またメールの終わりを表すピリオド(.)を認識させるために-cflfオプションをつけています。
read R BLOCK
EHLO localhost
250-smtp.ethereal.email Nice to meet you, FL1-133-202-39-183.tky.mesh.ad.jp
250-PIPELINING
250-8BITMIME
250-SMTPUTF8
250 AUTH LOGIN PLAIN
AUTH LOGIN
334 VXNlcm5hbWU6
bmFzaDQ0QGV0aGVyZWFsLmVtYWls
334 UGFzc3dvcmQ6
SFhXVXV3RDJQaHlmZUFFaDZx
235 Authentication successful
MAIL FROM:<from@kikutaro.tech>
250 Accepted
RCPT TO:<to@kikutaro.tech>
250 Accepted
DATA
354 End data with <CR><LF>.<CR><LF>
FROM:fromkiku<from@kikutaro.tech>
TO:tokiku<to@kikutaro.tech>
Subject:Hello
Hello!
.
250 Accepted [STATUS=new MSGID=Y0vyLSi6K045OhAOY0vys9l3tGx6Vw1SAAAAAvM1DReiMC0OldwiySpXM-4]
quit
221 Bye
closed
Swaks
Swaksだとこんな感じ。
swaks -t to@kikutaro.tech -f from@kikutaro.tech
--s smtp.ethereal.email -p 587
-tls -au xxxxx@ethereal.email -ap xxxxx
Nodemailer
Node.jsの入った環境で
npm install nodemailer
と入力してNodemailerを使ってメールを送ってみます。以下のようなJSファイルを作成します。
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
auth: {
user: 'xxxxx@ethereal.email',
pass: 'xxxxx'
}
});
let message = {
from: 'Sender Name <sender@example.com>',
to: 'Recipient <recipient@example.com>',
subject: 'Nodemailer is unicode friendly ✔',
text: 'Hello to myself!',
html: '<p><b>Hello</b> to myself!</p>'
};
transporter.sendMail(message, (err, info) => {
if (err) {
console.log('Error occurred. ' + err.message);
return process.exit(1);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
});
実行します。
node send.js
MessageIDとEthereal Emailで結果が確認できるURLが表示されるので後者にアクセスするだけです。
Message sent: <xxxxx@example.com>
Preview URL: https://ethereal.email/message/xxxxxxxx
Discussion