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