ふと、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-" みたいなのが、「ゴミ箱」「スター付き」「すべてのメール」「下書き」「送信済みメール」「迷惑メール」のどれかなんだろうな。
あとは、コマンドを覚えれば、一通りアクセスできるかと。。。
コマンド覚えるのめんどくさいな。どっかにいいサンプルないかな。
参考にしたサイト
SSLStream for GMail POP3s (I saw seashells.)
連載:インターネット・プロトコル詳説(8)IMAP4(Internet Mail Access Protocol version 4)(@IT)


コメントを残す