今回はPOP3で接続する方法を記載します。
接続までの流れ
必要なクラスは以下のようなクラスになります。
import com.coltware.airxmail.MimeMessage; import com.coltware.airxmail.pop3.POP3Client; import com.coltware.airxmail.pop3.POP3Event; import com.coltware.airxmail.pop3.POP3ListEvent; import com.coltware.airxmail.pop3.POP3MessageEvent;
送信時には、Senderというようになるべくプロトコルを意識しないようにしましたが、POP3ではまだそれらができていません。
将来的に、IMAP4もできたときにそれらができるようにしていきたいと思っています。
さて、それではおおよその流れですが・・・
var client:POP3Client = new POP3Client();
client.host = "pop.foo.com";
// client.port = 25; // デフォルトは25
client.setAuth("username","password");
client.connect();
:
ここで何らかの処理を書く
:
client.quit();
が一連の流れになります。
ちょっとした注意点ですが、
client.disconnect();
を実行しますと、現在はSocketの切断になってしまいます。
(これは間違えやすいような気がしますので・・・)
将来は、このあたりを変えようと思っておりますので、どのバージョンでもきちんと切断するには、quit()を使ったほうがとりあえずはいいかもしれません。
メールの一覧を取得する
メールの一覧では2つの処理が必要です。
1)一覧を取得するハンドラメソッドを記述する
2)一覧を取得する命令を投げる
です。
また、メールの一覧を取得するにはPOP3で2つのコマンドがあります。
・ list
・ uidl
uidlは、すべてのPOP3サーバでサポートされているわけではありませんが、私はサポートされていないPOP3サーバを知りません。
また、airxmailでもおおよそ同じような流れで取得できます。
では、取得方法です。
// listコマンドの結果
client.addEventListener(POP3ListEvent.POP3_RESULT_LIST,resultList);
// uidlコマンドの結果
client.addEventListener(POP3ListEvent.POP3_RESULT_UIDL,resultList);
private function resultList(e:POP3ListEvent):void{
for(var i:int = 0 ; i< e.length; i++){
trace("item [" + i + "] => " + e.getNumber(i) + "=" + e.getValue(i));
}
client.quit();
}
ここで、e.getNumber()とe.getValue()のかえる値が listコマンドとuidlコマンドでは多少ことなります。
listコマンドの結果
item [0] => 1=1182 item [1] => 2=1182 item [2] => 3=1065709 item [3] => 4=1065695 item [4] => 5=1065694 item [5] => 6=1065694 item [6] => 7=1065691 item [7] => 8=1065691 item [8] => 9=1065691
uidlコマンドの結果
item [0] => 1=000000014b5cd9ba item [1] => 2=000000024b5cd9ba item [2] => 3=000000034b5cd9ba item [3] => 4=000000044b5cd9ba item [4] => 5=000000054b5cd9ba item [5] => 6=000000064b5cd9ba item [6] => 7=000000074b5cd9ba item [7] => 8=000000084b5cd9ba item [8] => 9=000000094b5cd9ba
e.getNumber(i)の値は、ともに変わらないのですが、
e.getValue(i)がlistコマンドでは、メッセージのサイズに、uidlコマンドでは、POP3が発行するユニークなメールを識別するIDとなります。
したがって、後でメールを削除する場合などは、自然とuidlコマンドのほうを使うことになると思います。
メール(メッセージ)を取得する
メッセージの取得も、ハンドラと処理の2つのセットになっています。
また、実際のメッセージの取得は、listもしくはuidlコマンドの結果の中でおこないます。
したがって、先ほどと合わせたときのソースはこのようになります。
// uidlコマンドの結果
client.addEventListener(POP3ListEvent.POP3_RESULT_UIDL,resultList);
// メッセージの取得
client.addEventListener(POP3MessageEvent.POP3_MESSAGE,messageHandler);
private function resultList(e:POP3ListEvent):void{
for(var i:int = 0 ; i< e.length; i++){
client.retr(e.getNumber(i),e.getValue(i));
}
client.quit();
}
private function messageHandler(e:POP3MessageEvent):void{
var msg:MimeMessage = e.getMimeMessage();
trace("SUBJECT:" + msg.subjectUTF8);
:
ここでいろいろと本文に関する処理をする
:
}
retrメソッドは第1引数は、listでも、uidlでも同じですが、第2引数はpop3のuidとなっています。
ここで、指定すると、後でMimeMessageのプロパティとしても取得が可能となります。
次回からは、受信したときのMimeMessageの中身を見ていくことにします。



airxmailを使わせていただいでおります。
GmailもしくはYahooMail受信を
考えているのですが
どうもうまくPOP3に繋がりません
そもそも繋がったどうか
のエラーを取得することができないのですが
接続部分のサンプルがありましたら
おしえていただけないでしょうか?