DotNetFramework Softdev

ふと、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 CAPABILITY\r\n");
ReadStream(stream);

WriteStream(stream, "0001 LOGIN XXXX@gmail.com PASSWROD\r\n");
ReadStream(stream);

WriteStream(stream, "0002 NAMESPACE\r\n");
ReadStream(stream);

WriteStream(stream, "0003 LIST \"\" \"*\"\r\n");
ReadStream(stream);

WriteStream(stream, "0004 LSUB \"\" \"*\"\r\n");
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)

トラックバック(0)

トラックバックURL: http://www.cagylogic.com/cgi-bin/MovableType/mt-tb.cgi/1428

コメントする

ウェブページ

カテゴリ

2010年8月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

このブログ記事について

このページは、が2009年1月27日 00:01に書いたブログ記事です。

ひとつ前のブログ記事は「本の調達」です。

次のブログ記事は「攻殻機動隊 S.A.C. 2nd GIG」です。

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