ヤフーメールの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: サーバー
RewriteRuleが引数を処理できない問題 
2012/12/11 Tue.
基本動作ではREWRITERULEは引数を処理できない。
(例)
http://test.domain.com/rewritename.php?a=100
このURLをリライトさせた場合、
以下のパラメータの場合は
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rewritename.php changename.php
http://test.domain.com/changename.php
となって、引数部分が欠落してしまう。
そこで[QSA]オプションを利用すると、
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rewritename.php changename.php [QSA]
http://test.domain.com/changename.php?a=100
となって引数が引き継がれる。
(例)
http://test.domain.com/rewritename.php?a=100
このURLをリライトさせた場合、
以下のパラメータの場合は
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rewritename.php changename.php
http://test.domain.com/changename.php
となって、引数部分が欠落してしまう。
そこで[QSA]オプションを利用すると、
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rewritename.php changename.php [QSA]
http://test.domain.com/changename.php?a=100
となって引数が引き継がれる。
category: サーバー
ソフトバンクのネットワーク名が面白い 
2012/12/03 Mon.
自分が運営するサイトログに、ふと目に止まったドメイン名があった。
「jp-t.ne.jp」というもの。
なんだろ?と思いWHOISで調べてみたら、「メールサービス8」というネットワーク名だった。
なんだこれ?どこのネットワーク?
と思い調べてみたら、「ソフトバンク」だった。
で、さらに調べてみたら
JP-C.NE.JP
メールサービス1
JP-D.NE.JP
メールサービス2
JP-H.NE.JP
メールサービス9
JP-K.NE.JP
メールサービス3
JP-N.NE.JP
メールサービス4
JP-Q.NE.JP
メールサービス5
JP-R.NE.JP
メールサービス6
JP-S.NE.JP
メールサービス7
JP-T.NE.JP
メールサービス8
とあるそうな。
これらのドメインの登録日付が1999年9月28日となっているので、ソフトバンクの前身「J-PHONE」の時に取られたようです。
J-PHONE。適当すぎです。
「jp-t.ne.jp」というもの。
なんだろ?と思いWHOISで調べてみたら、「メールサービス8」というネットワーク名だった。
なんだこれ?どこのネットワーク?
と思い調べてみたら、「ソフトバンク」だった。
で、さらに調べてみたら
JP-C.NE.JP
メールサービス1
JP-D.NE.JP
メールサービス2
JP-H.NE.JP
メールサービス9
JP-K.NE.JP
メールサービス3
JP-N.NE.JP
メールサービス4
JP-Q.NE.JP
メールサービス5
JP-R.NE.JP
メールサービス6
JP-S.NE.JP
メールサービス7
JP-T.NE.JP
メールサービス8
とあるそうな。
これらのドメインの登録日付が1999年9月28日となっているので、ソフトバンクの前身「J-PHONE」の時に取られたようです。
J-PHONE。適当すぎです。
category: サーバー

