IMAP

ふと、IMAPのプロトコルについて興味を持ったのでお勉強。


普段、googleのメールを使っている。GMailは幸いにもIMAPをサポートしているので、それを使って実験。

GMailは、SSLでの接続を要求する。

TcpClient client = new TcpClient();
client.Connect(hostname, port);
SslStream stream = new SslStream(client.GetStream());
stream.AuthenticateAsClient(hostname);

てな感じで、SslStreamクラスを使えば、SSLの接続は簡単。

ついでに、文字列の受け渡しということで、

static string ReadStream(SslStream stream)
{
    Byte[] data = new byte[1024 * 1024];
    int bytes = stream.Read(data, 0, data.Length);

    string respondData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);

    Console.WriteLine(">> {0}", respondData);
    return respondData;
}

static void WriteStream(SslStream stream, string sendData)
{
    byte[] data = System.Text.Encoding.ASCII.GetBytes(sendData);
    stream.Write(data);
    Console.WriteLine("<< {0}", sendData);
}

てなヘルパークラスを準備。

あとは、

ReadStream(stream);
WriteStream(stream, "tag CAPABILITYrn");
ReadStream(stream);

WriteStream(stream, "0001 LOGIN XXXX@gmail.com PASSWRODrn");
ReadStream(stream);

WriteStream(stream, "0002 NAMESPACErn");
ReadStream(stream);

WriteStream(stream, "0003 LIST "" "*"rn");
ReadStream(stream);

WriteStream(stream, "0004 LSUB "" "*"rn");
ReadStream(stream);

てなコードを書けば、

>> * OK Gimap ready for requests from XXX.XXX.XXX.XXX. YYYYYYYYY

<< tag CAPABILITY

>> * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA XLIST CHILDREN XYZZY
tag OK Thats all she wrote! YYYYYYYYY

<< 0001 LOGIN XXXX@gmail.com PASSWORD

>> 0001 OK XXXX@gmail.com authenticated (Success)

<< 0002 NAMESPACE

>> * NAMESPACE (("" "/")) NIL NIL
0002 OK Success

<< 0003 LIST "" "*"

>> * LIST (HasNoChildren) "/" "INBOX"
* LIST (Noselect HasChildren) "/" "[Gmail]"
* LIST (HasNoChildren) "/" "[Gmail]/&MFkweTBmMG4w4TD8MOs-"
* LIST (HasNoChildren) "/" "[Gmail]/&MLQw33ux-"
* LIST (HasNoChildren) "/" "[Gmail]/&MLkwvzD8TtgwTQ-"
* LIST (HasNoChildren) "/" "[Gmail]/&Tgtm+DBN-"
* LIST (HasNoChildren) "/" "[Gmail]/&j,dg0TDhMPww6w-"
* LIST (HasNoChildren) "/" "[Gmail]/&kAFP4W4IMH8w4TD8MOs-"
* LIST (HasNoChildren) "/" "&j,dg0TDhMPww6w-"
0003 OK Success

てな感じで、フォルダのリストがとれる。

この、"[Gmail]/&MFkweTBmMG4w4TD8MOs-" みたいなのが、「ゴミ箱」「スター付き」「すべてのメール」「下書き」「送信済みメール」「迷惑メール」のどれかなんだろうな。

あとは、コマンドを覚えれば、一通りアクセスできるかと。。。

コマンド覚えるのめんどくさいな。どっかにいいサンプルないかな。

 

参考にしたサイト

APOPとIMAP(CRAM-MD5)をC#で使おう

SSLStream for GMail POP3s (I saw seashells.)

連載:インターネット・プロトコル詳説(8)IMAP4(Internet Mail Access Protocol version 4)(@IT)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください