最近、ThunderbirdやMailのようなメールクライアントではなくて、
コマンドライン上でメールサーバーにアクセスしたい衝動に駆られております。
POPでアクセスする方法はわかって、telnetを使えば簡単です。
<前提>
僕はMacBook Proを使っています。 Mac OS X バージョン 10.6.5 2010年に購入。<POPでYahoo メールにアクセスする>
1.ターミナルを立ち上げます。2.次のように打ちます。
3.そうすると以下のような反応が返ってくるはず。
Connected to pop.mail.yahoo.co.jp.
Escape character is '^]'.
+OK hello from popgate(2.35.17)
4.これでPOPの接続はOKなので、あとは認証とかしてください。
例えば、こちらのページにPOPのコマンドが乗ってます。
例えば、ログインは以下のよう。赤字はこちらが打つ文字。
黒字はサーバーからの反応。
+OK password required.
pass [yahooのパスワード]
+OK maildrop ready, 4420 messages (113786384 octets) (626826062)
上記、赤字部分のuser とかpassが、POPのコマンドになります。
てっきり大文字で打たないとうけつけないのかと思っておりましたが、
大文字小文字関係なく、受け付けてくれるようなので、
あえて小文字で書いてみました。
<GmailにIMAPで接続>
さて、本題。こんな感じで今度はGmailに接続したいと考えました。
GmailはPOPもIMAPも両方サポートしていますが、
今回はIMAPで接続したかったのです。(ラベルとかいじりたかったから)
で、yahooにpopでアクセスするみたくは簡単にいかなかったので、
ここに書いておきます。
まず、さきほどのYahooとの違いはPOPではなくIMAPだということです。
そして、さらに大きな違いが、SSLでつながないと駄目だということ。
GmailをIMAPで使用する際の設定はこちらに書いてあります。
その他のメール クライアントの設定 - Gmail ヘルプ
とりあえず、IMAPサーバは「imap.gmail.com」であること、
ポート番号は「993」であることがわかります。
無理矢理 telnet でGmail のIMAPにつないでみる
SSL云々は無視して無理やりtelnetで接続すると以下のようになります。
Trying 74.125.53.109...
Connected to gmail-imap.l.google.com.
Escape character is '^]'.
と、ここまではあっさりつながります。
しかし、ログインしようとする(POPとはコマンドが違います)とあっさり
接続は切られます。
Connection closed by foreign host.
SSLを使っていないと、何もできません。
どうやったらSSL上でIMAPのコマンドを実行できるか?
簡単でした。opensslを使えばよいのです。
Reference
以下のページを参考にさせてもらいました。
Using OpenSSL to securely connect to your IMAP account | Jaharmi's Irreality
Gmail IMAP - Some messages could not be FETCHed Error - Gmail Help
超現実いもす(imos)の日記 - SSL 越しに telnet する
小悪魔女子大生のサーバエンジニア日記 » Blog Archive » OpenSSLでSSLの様子を見てみよう!
OpenSSLでGmailサーバーにつなぐ
まず、OpenSSLでGmailサーバーとつなげます。
...
(略)
...
* OK Gimap ready for requests from 111.234.238.21 d32if2767639vcs.84
IMAPコマンドの前に ? をつける
次にログインします。
* CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
? OK [Gmail ID] authenticated (Success)
ここで重要なのはLOGINコマンドの前の「?」です。
最初、この記号のことを見落として打っていて、
と、知らないコマンドだと怒られていました。
コマンドの前の「?」は重要です。
それで、?をつければログインはうまくいくのですが、
ログインしたあと「LSIT "" *」とかやって一覧を表示しようとすると、
Gmailサーバーが全然反応してくれません。
この原因がよくわからなかったのですが、
上記のリンクのページを見ていたら、どうも改行コードが問題なのかも
という気がしてきました。
-crlf オプションをつける
そこで、OpenSSLを一旦切断し、再度接続してみました。
今度は「-crlf」というオプションを追加します。
改行コードとしては、UNIXは「LF」で、Windowsは「CR+LF」、
Macだと「CR」なわけですが、
なぜかこの場合「CRLF」にしないといけないみたいです。
これをつけると、エンターキーを押したときにCR/LFを付加するらしい。
Demonstration
さて、仕切り直しで、以下のようにopensslでアクセスすれば、
以降のIMAPのコマンドも受け付けてくれます。
さらに「-quiet」オプションをつけたのは吐き出されるレスポンスを
見やすくするためです。
なくても支障ありません。
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
* OK Gimap ready for requests from 111.234.238.21 p1if6038217fah.52
? login [Gmail ID] [Gmail Pass]
* CAPABILITY IMAP4rev1 UNSELECT LITERAL+ IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 UIDPLUS COMPRESS=DEFLATE
? OK [Gmail ID] authenticated (Success)
? select inbox
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
* OK [UIDVALIDITY 596475824]
* 747 EXISTS
* 0 RECENT
* OK [UIDNEXT 1122]
? OK [READ-WRITE] inbox selected. (Success)
? logout
* BYE LOGOUT Requested
? OK 73 good day (Success)
read:errno=0
以上です。
実はIMAPコマンドの意味がわからなくて、
ログインだけできて、メールの操作などはできていません。。。。