The project of U-WA-
http://uwa.potetihouse.com/
戻る
TKMP.DLL   プログラミングTips

メールを非同期で受信する

 メール受信をメインスレッドと非同期で行うには、TKMP.Net.MailDataクラスのReadBodyAnsyncメソッドを使用します。 このメソッドは実行するとメール受信を行う別スレッドを立ち上げたあと、直ぐに処理を返します。 メールの受信完了はTKMP.Net.MailDataクラスのBodyLoadedイベントで行います。 ただし、このイベント読み出しは別スレッドから行われるためコントロールを操作する場合は注意してください。
 非同期でのサーバーとの通信処理はすべてキューとして扱われるため、 前の処理が終了する前に次の要求を発行すると、要求順に順次処理が行われます。 ただし、同期処理での要求は、処理キューと関係なく最優先で実行されます。
 次のサンプルではサーバーへ接続済みのTKMP.Net.PopClientクラスからすべてのメールを非同期で受信します。 ReadMailメソッドへTKMP.Net.PopClientクラスを引数として渡すと、メソッドの処理が直ぐに終了し、 その後、デバッグウィンドウに受信したメールの件名が表示されます。
C#.NET
//メールボックス内のすべてのメールを非同期で読み出します。
//このメソッドはメールの読み出しが完了する前に終了します。
public void ReadMail(TKMP.Net.PopClient pop)
{
    foreach(TKMP.Net.MailData MailData in pop.MailDatas)
    {
        //メールの受信完了時のイベント処理メソッドを登録します。
        MailData.BodyLoaded +=new EventHandler(MailData_BodyLoaded);
        //非同期での読み出しを実行します。
        MailData.ReadBodyAnsync();
    }
}

//各メールの受信が完了するごとにこのメソッドが実行されます。
private void MailData_BodyLoaded(object sender, EventArgs e)
{
    //イベント発行元のクラスを取り出します
    TKMP.Net.MailData MailData = (TKMP.Net.MailData)sender;

    //メッセージ表示のためのメール解析を行います。
    TKMP.Reader.MailReader reader = new TKMP.Reader.MailReader(MailData.DataStream , true);
    System.Diagnostics.Debug.WriteLine("メールを受信しました[" + reader.HeaderCollection["Subject"] + "]");

    //イベントへ登録したメソッドを削除します。
    MailData.BodyLoaded -=new EventHandler(MailData_BodyLoaded);
}
VB.NET
'メールボックス内のすべてのメールを非同期で読み出します。
'このメソッドはメールの読み出しが完了する前に終了します。
Public Sub ReadMail(ByVal pop As TKMP.Net.PopClient)
    Dim MailData As TKMP.Net.MailData
    For Each MailData In pop.MailDatas
        'メールの受信完了時のイベント処理メソッドを登録します。
        AddHandler MailData.BodyLoaded, AddressOf MailData_BodyLoaded
        '非同期での読み出しを実行します。
        MailData.ReadBodyAnsync()
    Next MailData
End Sub


'各メールの受信が完了するごとにこのメソッドが実行されます。
Private Sub MailData_BodyLoaded(ByVal sender As Object, ByVal e As EventArgs)
    'イベント発行元のクラスを取り出します
    Dim MailData As TKMP.Net.MailData = CType(sender, TKMP.Net.MailData)

    'メッセージ表示のためのメール解析を行います。
    Dim reader As New TKMP.Reader.MailReader(MailData.DataStream, True)
    System.Diagnostics.Debug.WriteLine(("メールを受信しました[" + reader.HeaderCollection("Subject") + "]"))

    'イベントへ登録したメソッドを削除します。
    RemoveHandler MailData.BodyLoaded, AddressOf MailData_BodyLoaded
End Sub
VB.NETのコードはC#.NETを元に「C#.NET to VB.NET Translator」によって作成したものです

トップページへ移動
The project of U-WA-
http://uwa.potetihouse.com/