【Ubuntu】コマンドラインからSMTP AUTH + STARTTLSなSMTPサーバ を使ってメールを送信する方法

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が帰ってきます。

コメント

タイトルとURLをコピーしました