telnetからSMTPを使ってメール送信

yahooのメールにtelnetからSMTPを使ってメール送信してみます。

$ telnet smtp.mail.yahoo.co.jp 25
Trying 183.79.29.237...
telnet: connect to address 183.79.29.237: Connection refused
telnet: Unable to connect to remote host

はい。Connection refusedされましたね。 これはプロバイダがOutbound Port 25 Blockingをかけているからです。 なので、サブミッションポートの587を指定して繋ぎます。

$ telnet smtp.mail.yahoo.co.jp 587
Trying 183.79.29.237...
Connected to smtp.mail.g.yahoo.co.jp.
Escape character is '^]'.
220 smtp526.mail.kks.yahoo.co.jp ESMTP
EHLO localhost
250-smtp526.mail.kks.yahoo.co.jp
250-AUTH LOGIN PLAIN XYMCOOKIE
250-PIPELINING
250 8BITMIME
MAIL FROM:自分のメールアドレス
530 Sorry, please use SMTP-AUTH instead - for help go to http://www.yahoo-help.jp/app/answers/detail/a_id/79799/p/622
Connection closed by foreign host.

はい。Connection closedされました。 エラーメッセージからもわかるように、SMTP-Auth(SMTP認証)が必要です。 なので、以下のコマンドを使って認証用の文字列を生成します。

printf "%s\0%s\0%s" メールアドレス メールアドレス パスワード | openssl base64 -e | tr -d '\n'; echo

で、出力された認証用文字列をコピーしておきます。

telnet smtp.mail.yahoo.co.jp 587
Trying 183.79.29.237...
Connected to smtp.mail.g.yahoo.co.jp.
Escape character is '^]'.
220 smtp530.mail.kks.yahoo.co.jp ESMTP
EHLO localhost
250-smtp530.mail.kks.yahoo.co.jp
250-AUTH LOGIN PLAIN XYMCOOKIE
250-PIPELINING
250 8BITMIME
AUTH PLAIN 認証用文字列
235 ok, go ahead (#2.0.0)
MAIL FROM:送信元メールアドレス
250 ok
RCPT TO:送信先メールアドレス
250 ok
DATA
354 go ahead
Subject: hoge
From: 送信元メールアドレス
To: 送信先メールアドレス

hello!
.
250 ok 1454173930 qp 24032
quit
221 smtp531.mail.kks.yahoo.co.jp
Connection closed by foreign host.

で、yahooメールを見てみるとメールが届いているのが分かります。