GmailにIMAPでMacのターミナルからアクセスする

| | トラックバック(0)

最近、ThunderbirdやMailのようなメールクライアントではなくて、
コマンドライン上でメールサーバーにアクセスしたい衝動に駆られております。
POPでアクセスする方法はわかって、telnetを使えば簡単です。

<前提>

僕はMacBook Proを使っています。 Mac OS X バージョン 10.6.5 2010年に購入。


スクリーンショット(2010-12-13 19.04.54).png

<POPでYahoo メールにアクセスする>

1.ターミナルを立ち上げます。

2.次のように打ちます。

telnet pop.mail.yahoo.co.jp 110

3.そうすると以下のような反応が返ってくるはず。

Trying 114.111.99.249...
Connected to pop.mail.yahoo.co.jp.
Escape character is '^]'.
+OK hello from popgate(2.35.17)

4.これでPOPの接続はOKなので、あとは認証とかしてください。
例えば、こちらのページにPOPのコマンドが乗ってます。
例えば、ログインは以下のよう。赤字はこちらが打つ文字。
黒字はサーバーからの反応。

user [yahooのユーザー名]

+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で接続すると以下のようになります。

telnet imap.gmail.com 993
Trying 74.125.53.109...
Connected to gmail-imap.l.google.com.
Escape character is '^]'.

と、ここまではあっさりつながります。
しかし、ログインしようとする(POPとはコマンドが違います)とあっさり
接続は切られます。

LOGIN [gmailのアドレス(@gmail.com込み)] [gmailのパスワード]

Connection closed by foreign host.

SSLを使っていないと、何もできません。
どうやったらSSL上でIMAPのコマンドを実行できるか?

簡単でした。opensslを使えばよいのです。

Reference

以下のページを参考にさせてもらいました。

OpenSSLでGmailサーバーにつなぐ

まず、OpenSSLでGmailサーバーとつなげます。

openssl s_client -connect imap.gmail.com:993

...
(略)
...
* OK Gimap ready for requests from 111.234.238.21 d32if2767639vcs.84

IMAPコマンドの前に ? をつける

次にログインします。

? 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)

ここで重要なのはLOGINコマンドの前の「?」です。
最初、この記号のことを見落として打っていて、

login BAD Unknown command y22if5170052wfd.38

と、知らないコマンドだと怒られていました。
コマンドの前の「?」は重要です。
それで、?をつければログインはうまくいくのですが、
ログインしたあと「LSIT "" *」とかやって一覧を表示しようとすると、
Gmailサーバーが全然反応してくれません。
この原因がよくわからなかったのですが、
上記のリンクのページを見ていたら、どうも改行コードが問題なのかも
という気がしてきました。

-crlf オプションをつける

そこで、OpenSSLを一旦切断し、再度接続してみました。
今度は「-crlf」というオプションを追加します。
改行コードとしては、UNIXは「LF」で、Windowsは「CR+LF」、
Macだと「CR」なわけですが、
なぜかこの場合「CRLF」にしないといけないみたいです。
これをつけると、エンターキーを押したときにCR/LFを付加するらしい。

Demonstration

さて、仕切り直しで、以下のようにopensslでアクセスすれば、
以降のIMAPのコマンドも受け付けてくれます。
さらに「-quiet」オプションをつけたのは吐き出されるレスポンスを
見やすくするためです。
なくても支障ありません。

openssl s_client -connect imap.gmail.com:993 -crlf -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コマンドの意味がわからなくて、
ログインだけできて、メールの操作などはできていません。。。。

comments powered by Disqus

トラックバック(0)

このブログ記事を参照しているブログ一覧: GmailにIMAPでMacのターミナルからアクセスする

このブログ記事に対するトラックバックURL: http://nozawashinichi.sakura.ne.jp/MT-4.25/mt-tb.cgi/799

comments powered by Disqus

このブログ記事について

このページは、Shinichi Nozawaが2010年12月13日 19:02に書いたブログ記事です。

ひとつ前のブログ記事は「twitterアカウント」です。

次のブログ記事は「Perlのモジュールでよくわかってなかったこと」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。