ヤフーメールのSMTPをコマンドで直接操作する 
2013/03/29 Fri.
以前Gmailを使ったやり方を記載しておりましたが、いつのまにかセキュリティーが厳しくなって、ユーザーパスワードではサーバーにログインできなくなってました。
「安全性の低いアプリからのアカウントへのアクセス」を「許可」してもログインできない。
たぶん、2段階認証でアプリごとのパスワードを取得すればログインできるような気がしますが、それは試していません。
そういうわけで、以下の説明をGmailからヤフーメールに書き換えました。(2018/7/15)
外部メールサーバーのSMTPをPHPで操作する必要があって、その動きを知るためヤフーメールの送信サーバーをコマンドラインで操作して勉強してみた備忘録。
なお、ここで使用するヤフーメールはアメリカヤフー(yahoo.com)です。HAHAHA。
理由は一応TLS接続のことも書いておきたかったのですが、日本のヤフーはSSL接続しかできないみたいだからです。
以上余談。
ヤフーメールのSMTPは「SMTP over SSL」という仕組みで動いているので、自分の環境にOPENSSLが入っていることを前提とします。
さて、それではヤフーメールのSMTPに直接アクセスしてみましょう。
なお、緑色の文字が自分で入力する文字で、ピンク色がサーバーの返答です。
※メール本文の入力終了を意味する「.」を認識しないときがあるので、「-crlf」を付けておく。
> openssl s_client -crlf -connect smtp.mail.yahoo.com:465
CONNECTED(00000003)
~ずらずらと表示される~
220 smtp.mail.yahoo.com ESMTP ready
もしくは
> openssl s_client -starttls smtp -crlf -connect smtp.mail.yahoo.com:587
CONNECTED(00000003)
~ずらずらと表示される~
250 STARTTLS
ehlo localhost
250-smtp403.mail.sg3.yahoo.com Hello localhost [***.***.***.***])
250-PIPELINING
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE 41697280
250 AUTH PLAIN LOGIN XOAUTH2 OAUTHBEARER XYMCOOKIE
auth login
334 XXXXXXXXXXXX
base64でエンコードしたヤフーID(xxxx@yahoo.com)
※日本のヤフーの場合は「@」の前部分のみ。xxxx@yahoo.co.jp なら xxxx のみ。
334 XXXXXXXXXXXX
base64でエンコードしたユーザーパスワード
235 2.7.0 Authentication successful
mail from:xxxx@yahoo.com
250 2.1.0 Sender <xxxx@yahoo.com> OK
rcpt to:送信先@メール.アドレス
250 2.1.5 Recipient <送信先@メール.アドレス> OK
data※ここからメールデータの入力開始
354 Ok Send data ending with <CRLF>.<CRLF>
subject:Test Mail ※件名
(改行) ←忘れないように!
This is test mail ※本文
. ※このピリオドでメールデータの入力終了
250 OK , completed
quit
221 Service Closing transmission
送信先アドレスにメールが届いているか確認してみましょう。
このやり方の肝は、ログインメールアドレスとパスワードをBASE64でエンコードするということでしょうか。
エンコードせずに打ち込んでもエラーになりますのでご注意を。
「安全性の低いアプリからのアカウントへのアクセス」を「許可」してもログインできない。
たぶん、2段階認証でアプリごとのパスワードを取得すればログインできるような気がしますが、それは試していません。
そういうわけで、以下の説明をGmailからヤフーメールに書き換えました。(2018/7/15)
外部メールサーバーのSMTPをPHPで操作する必要があって、その動きを知るためヤフーメールの送信サーバーをコマンドラインで操作して勉強してみた備忘録。
なお、ここで使用するヤフーメールはアメリカヤフー(yahoo.com)です。HAHAHA。
理由は一応TLS接続のことも書いておきたかったのですが、日本のヤフーはSSL接続しかできないみたいだからです。
以上余談。
ヤフーメールのSMTPは「SMTP over SSL」という仕組みで動いているので、自分の環境にOPENSSLが入っていることを前提とします。
さて、それではヤフーメールのSMTPに直接アクセスしてみましょう。
なお、緑色の文字が自分で入力する文字で、ピンク色がサーバーの返答です。
※メール本文の入力終了を意味する「.」を認識しないときがあるので、「-crlf」を付けておく。
> openssl s_client -crlf -connect smtp.mail.yahoo.com:465
CONNECTED(00000003)
~ずらずらと表示される~
220 smtp.mail.yahoo.com ESMTP ready
もしくは
> openssl s_client -starttls smtp -crlf -connect smtp.mail.yahoo.com:587
CONNECTED(00000003)
~ずらずらと表示される~
250 STARTTLS
ehlo localhost
250-smtp403.mail.sg3.yahoo.com Hello localhost [***.***.***.***])
250-PIPELINING
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-SIZE 41697280
250 AUTH PLAIN LOGIN XOAUTH2 OAUTHBEARER XYMCOOKIE
auth login
334 XXXXXXXXXXXX
base64でエンコードしたヤフーID(xxxx@yahoo.com)
※日本のヤフーの場合は「@」の前部分のみ。xxxx@yahoo.co.jp なら xxxx のみ。
334 XXXXXXXXXXXX
base64でエンコードしたユーザーパスワード
235 2.7.0 Authentication successful
mail from:xxxx@yahoo.com
250 2.1.0 Sender <xxxx@yahoo.com> OK
rcpt to:送信先@メール.アドレス
250 2.1.5 Recipient <送信先@メール.アドレス> OK
data※ここからメールデータの入力開始
354 Ok Send data ending with <CRLF>.<CRLF>
subject:Test Mail ※件名
(改行) ←忘れないように!
This is test mail ※本文
. ※このピリオドでメールデータの入力終了
250 OK , completed
quit
221 Service Closing transmission
送信先アドレスにメールが届いているか確認してみましょう。
このやり方の肝は、ログインメールアドレスとパスワードをBASE64でエンコードするということでしょうか。
エンコードせずに打ち込んでもエラーになりますのでご注意を。
category: サーバー
| h o m e |