今回は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); : ここでいろいろと本文に関する処理をする : } [/as3] retrメソッドは第1引数は、listでも、uidlでも同じですが、第2引数はpop3のuidとなっています。 ここで、指定すると、後でMimeMessageのプロパティとしても取得が可能となります。 次回からは、受信したときのMimeMessageの中身を見ていくことにします。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

One Response to “air: airxmail – POP3に接続する”

  • nobu says:

    airxmailを使わせていただいでおります。

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

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2010年2月
« 1月   3月 »
1234567
891011121314
15161718192021
22232425262728

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ