UbuntuのコマンドラインからSMTP AUTH(認証方式PLAIN) + STARTTLEなSMTPサーバを使用してメールを送信する方法です。
今回はクライアントとしてUbuntuを使用していますが、opensslコマンドが使用できる環境であれば同様の手順でメール送信を行うことができます。
SMTP AUTH(認証方式PLAIN)の認証情報について
SMTP AUTHの認証方式がPLAINの場合、認証時に使用する情報は「ユーザ名\0ユーザ名\0パスワード」形式をBase64でエンコードして入力する必要があります。(0は数字のゼロです)
ですので、最初に下記の方法で認証に使用する情報をBase64でエンコードしておきましょう。
printf "ユーザ名\0ユーザ名\0パスワード" | base64
実際にSMTP AUTHの認証に必要な情報をBase64でエンコードして表示させてみます。
- ユーザ名 testuser
- パスワード passw0rd
$ printf "testuser\0testuser\0passw0rd" | base64
dGVzdHVzZXIAdGVzdHVzZXIAcGFzc3cwcmQ=
赤字の部分がSMTP AUTHの認証で使用する情報になります。
メールを送信を行うためのコマンド
コマンドラインからSMTP AUTH + STARTTLSなSMPTサーバに接続して、メールを送信する際に実行するコマンドの流れになります。
openssl s_client -connect SMTPサーバ:587 -starttls smtp -crlf -quiet EHLO クライアントのホスト名 AUTH PLAIN 認証情報(Base64エンコード) MAIL FROM:送信元メールアドレス RCPT TO:宛先メールアドレス DATA To:宛先メールアドレス From:送信元メールアドレス Subject:件名 Content-Type:text/plain; charset='UTF-8' メッセージを入力 . QUIT
実行例
以下の内容でコマンドラインからメールを送信した際のログです。
- SMTPサーバ:vpslife.server-memo.net:587
- 送信元メールサーバ(From):testuser@vpslife.server-memo.net
- 宛先メールサーバ(To):tamohiko@server-memo.net
実際に実行したコマンド部分を赤字で表示させています。
$ openssl s_client -connect vpslife.server-memo.net:587 -starttls smtp -crlf -quiet depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R10 verify return:1 depth=0 CN = vpslife.server-memo.net verify return:1 250 CHUNKING EHLO localhost 250-vpslife.server-memo.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-SMTPUTF8 250 CHUNKING AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAcGFzc3cwcmQ= 235 2.7.0 Authentication successful MAIL FROM:testuser@vpslife.server-memo.net 250 2.1.0 Ok RCPT TO:tamohiko@server-memo.net 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> To:tamohiko@server-memo.net From:testuser@vpslife.server-memo.net Subject:Test Mail Content-Type:text/plain; charset='UTF-8' This is Test Mail. . 250 2.0.0 Ok: queued as 6E2DE12011F QUIT 221 2.0.0 Bye
コマンド説明
実行したコマンドについて詳しく説明を行っていきます。
openssl s_client -connect SMTPサーバ:587 -starttls smtp -crlf -quiet
opensslコマンドを使いSTARTTLSで、SMTPサーバの587番ポートに接続を行います。
$ openssl s_client -connect vpslife.server-memo.net:587 -starttls smtp -crlf -quiet depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R10 verify return:1 depth=0 CN = vpslife.server-memo.net verify return:1 250 CHUNKING
EHLO クライアントのホスト名
SMTPサーバにSTATTLSで接続できたら、EHLO(Extended HELLO)コマンドで自分のホスト名を名乗り挨拶を行います。
ここで名乗るホスト名はlocalhostとか、クライアントのホスト名を入力してください
EHLOを実行すると、SMTPサーバのホスト名と使用できる機能が表示されます。
EHLO localhost 250-vpslife.server-memo.net 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-SMTPUTF8 250 CHUNKING
AUTH PLAIN 認証情報
「AUTH PLAIN 認証情報」と入力するとSMTP AUTHの認証が行われます。
認証情報は、先に説明してあるとおり「ユーザ名\0ユーザ名\0パスワード」形式をBase64でエンコードしたものを入力します。
認証が成功すると応答コード235とその旨のメッセージが表示されます。
AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAcGFzc3cwcmQ= 235 2.7.0 Authentication successful
認証に失敗すると応答コード535とErrorメッセージが表示されます。
535 5.7.8 Error: authentication failed:
MAIL FROM:送信元メールアドレス
メールを送信(From)するアドレスを入力します。
MAIL FROM:testuser@vpslife.server-memo.net 250 2.1.0 Ok
成功すると応答コード250が帰ってきます。
RCPT TO:宛先メールアドレス
メールの宛先(To)アドレスを入力します。
RCPT TO:tamohiko@server-memo.net 250 2.1.0 Ok
成功すると応答コード250が帰ってきます。
DATA
DATAコマンドを実行すると応答コード354を返してくるので、その後にメールの本文を入力します。
DATA 354 End data with <CR><LF>.<CR><LF>
メール本文のデータとして以下の内容を入力します。
- To:宛先メールアドレス
- From:送信元メールアドレス
- Subject:件名
- Content-Type:text/plain; charset='UTF-8'
- メッセージを入力
- .(メールデータ入力完了)
「.」だけを入力することで入力を完了させることが出来ます。
To:tamohiko@server-memo.net From:testuser@vpslife.server-memo.net Subject:Test Mail Content-Type:text/plain; charset='UTF-8' This is Test Mail. . 250 2.0.0 Ok: queued as B0B9E120171
成功すると応答コード250が帰ってきて、メールの送信が行われます。
QUIT
QUITと入力することで、SMTPサーバとのやり取りを終了させることが出来ます。
QUIT 221 2.0.0 Bye
成功すると応答コード221が帰ってきます。
コメント