RECOMMEND
C# 言語リファレンス Black Book
C# 言語リファレンス Black Book (JUGEMレビュー »)
ビル ワグナー, Bill Wagner, スリーエーシステムズ, アクロバイト
RECOMMEND
RECOMMEND
SELECTED ENTRIES
CATEGORIES
ARCHIVES
MOBILE
qrcode
LINKS
PROFILE
OTHERS

07
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--

メール

主に、メール送受信ライブラリを紹介します。各種ソフトウェア、PHPコンテンツ制作、SEO対策もお任せください。
ReceiveAllMessagesでメールを受信中に受信を途中でキャンセルするのはどうしたらいいでしょうか?
0

    この関数は名前の通り一度に全てのメールを受信するため、途中で止めることは想定されていません


    中断可能なメール受信機能を実現するには

    カスタムオペレーションの使用をおすすめ致します

    サンプルはこちらをご参照ください

    http://exwarp.com/member/useroperations.html 


    他の方法として、一度に全てのメールを処理しないオプションも用意されています


    pop3client.setProperty(“RetrLimit”,1);


    というコードを受信処理の前に追加すると

    サーバーのメール件数に関わりなく1件の受信で処理が完了します


    その他、緊急対応としては

    pop3client.Socket

    でソケットを取得し、ソケットを閉じることも出来ます。

    この方法は通信を遮断するため、適切に例外をハンドリングしてください


    | technicals | 14:36 | - | - | - | - |
    【質問】1件づつメールをサーバより削除する方法はどのようにするのでしょうか?
    0
      メールをどのタイミングで削除するのかにより、手順が異なりますが以下の2通りの場面について解説いたします。

      ■メールの受信と同時にメールをサーバーから削除する
      この場合、Exwarp.Net.Pop3.Pop3ClientオブジェクトのReceiveAllMessages()メソッドを実行する際のパラメータ値にtrueを指定することで、メールの受信と同時に削除を実行できます。
      詳しくはこちらの記事を参照ください。

      ■メールの受信とは別にサーバーからメールを削除する
      この場合、こちらにカスタムオペレーションのソースコードを公開しておりますので、ご参考になってください。
      本カスタムオペレーションを実行すると、メールサーバーからすべてのメールを1件ずつ削除することができます。削除するメールを判別しながら削除するなどの処理を実行したい場合は、ソースコードに必要な条件式を入力していただくことで対応可能です。
      | technicals | 17:03 | - | - | - | - |
      【質問】特定の「件名」のメッセージだけを取得するには?
      0
        特定の件名が含まれるメッセージを受信するには、カスタム受信処理を行う必要があります。
        下記の要領でカスタム受信を行います。

        ■POP3ホストへ接続
        ■ログイン認証
        ■STATコマンドの送信とメール件数の取得

        ◇すべてのメールに対して次の処理を繰り返す。
        ■TOPコマンドを使用してそれぞれのメールのヘッダーを取得
        ■受信したいSubjectの場合は、RETRコマンドを使用してメールメッセージの取得
        ■必要ならDELEコマンドを使用して受信メールの削除
        ◇繰り返し終わり

        ■QUITコマンドを送信してログオフ

        カスタム受信のサンプルはこちらを参照してください。
        | technicals | 12:34 | - | - | - | - |
        【質問】SMTPでデータ受信が行なえますか?
        0
          SMTPは、メール送信のためのプロトコルですので、「データ受信」が「メール受信」という意味でしたら、POP3プロトコルを使用する必要があります。
          Exwarp MailKitにはPOP3クライアントも含まれておりますので、こちらを利用してメール受信プログラムは簡単に実装できます。

          Exwarp MailKitには、SMTPクライアントも含まれておりますが、あくまでSMTPプロトコルの枠内でのデータ受信となりますので、独自のメッセージを送受信することは出来ません。
          | technicals | 22:49 | - | - | - | - |
          メールの受信後にサーバーから削除する
          0
            メールの受信後にサーバーからメールを削除したい場合は,ReceiveAllMessages()メソッドに削除パラメータをわたす方法が最も簡単です。
            【注意!】削除したメールは二度と元に戻りませんのでご注意ください。
            [VB.NET]
            client.Connect()
            client.ReceiveAllMessages(True)
            client.Close()

            または、
            client.Connect()
            client.DeleteAfterReceive = True
            client.ReceiveAllMessages()
            client.Close()

            ちなみに、RunCommand()メソッドを利用する場合は、次のようになります。
            client.Connect()
            client.DeleteAfterReceive = True
            client.RunCommand("ReceiveAllMessages")
            client.Close()
            解説
            clientは初期化済みのExwarp.Net.Pop3.Pop3Clientインスタンスを表します。

            Exwarp.Net.Pop3.Pop3Client.ReceiveAllMessages()メソッドは、パラメータを1つ受け取ることができます。
            このパラメータは、メールの受信後に受信したメールをサーバーから削除するかどうかのフラグを表し、
            内部的には、Pop3Clinet.DeleteAfterReceiveプロパティの値を更新してから受信を実行します。

            trueをセットすると、受信後にPOP3サーバーからメールを削除する処理が自動的に実行されます。デフォルトはfalseです。
            ReceiveAllMessages()メソッドは、RunCommand("ReceiveAllMessage")のラッパーメソッドとして実装しているため、どちらの方法を採用しても動作に違いはありません。
            | technicals | 17:44 | - | - | - | - |
            POP3サーバーからメールを削除せずに新規メールのみを取得する
            0
              Exwarp MailKitのPop3ClientContextプロパティを使用すると、すでに受信済みのメールのUID(ユニークID)を保存することができます。
              この機能を利用すると、POP3サーバーからメールを削除せずに、新着メールのみの受信を行なうことができます。
              [C#]
              Exwarp.Net.Pop3.Pop3Client pc = new Exwarp.Net.Pop3.Pop3Client("POP3_HOST");
              pc.User = "POP3_USER";
              pc.Pass = "POP3_PASS";
              pc.Context = context;
              pc.Connect();
              pc.ReceiveAllMessages();
              pc.Close();

              [VB.Net]
              Dim pc As New Exwarp.Net.Pop3.Pop3Client("POP3_HOST")
              pc.User = "POP3_USER"
              pc.Pass = "POP3_PASS"
              pc.Context = context
              pc.Connect()
              pc.ReceiveAllMessages()
              pc.Close()

              [解説]
              POP3_HOSTはPOP3ホスト、
              POP3_USERはPOP3ホストへ接続するユーザー名、
              POP3_PASSはPOP3ホストへ接続するパスワードをそれぞれ表す文字列定数です。
              contextExwarp.Net.Pop3.Pop3Contextのインスタンスを表します。このクラスのインスタンスの生成方法については下部でさらに説明します。

              通常のメール受信の前にExwarp.Net.Pop3.Pop3ClientオブジェクトのContextプロパティにExwarp.Net.Pop3.Pop3Contextオブジェクトをセットします。
              ContextプロパティにPop3Contextオブジェクトがセットされている場合、Pop3Clientは、受信メールのUIDのリストをPop3ContextUniqueIdListプロパティに追加してゆきます。

              Pop3Contextオブジェクトを毎回の受信の前にセットすることで、新着メールのみを受信することができますが、そのためにはPop3Contextオブジェクトをシリアル化(保存)して、次回の受信時に復元しなくてはいけません。
              次にExwarp.Net.Pop3.Pop3Contextオブジェクトのシリアル化/デシリアル化を解説します。

              以下の例では,contextという変数で表されるExwarp.Net.Pop3.Pop3ContextオブジェクトをC:¥context.serというファイルに保存/復元します。(ファイル名及び拡張子はどんな文字列でも構いません。)

              Exwarp.Net.Pop3.Pop3ContextクラスはSystem.SerializableAttribute属性が定義されています。ですからこのオブジェクトをフォーマッタを使用してシリアライズ/デシリアイズすることができます。
              ■シリアライズ方法(保存)
              [C#]
              System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Create);
              System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
              f.Serialize(st,context);
              st.Close();

              [VB.Net]
              Dim st as New System.IO.FileStream("c:¥pop3context.ser",System.IO.FileMode.Create)
              dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
              f.Serialize(st,context)
              st.Close()

              [解説]
              オブジェクトのシリアル化には、System.Runtime.Serialization.Formatters.Binary.BinaryFormatterクラスを使用します。シリアル化(保存)したいファイルのストリームを表すSystem.IO.Streamとシリアル化したいオブジェクト(context)をSerializeメソッドのパラメータにセットするだけでオブジェクトのシリアル化は完了です。

              ■デシリアライズ方法(復元)
              [C#]
              System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Open);
              System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
              Exwarp.Net.Pop3.Pop3Context context = (Exwarp.Net.Pop3.Pop3Context)f.Deserialize(st);
              st.Close();

              [VB.Net]
              Dim st as New System.IO.FileStream("c:¥pop3context.ser",System.IO.FileMode.Open)
              dim f As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
              Dim context As Exwarp.Net.Pop3.Pop3Context = f.Deserialize(st)
              st.Close()

              [解説]
              オブジェクトの復元には、System.Runtime.Serialization.Formatters.Binary.BinaryFormatterクラスを使用します。デシリアイズ(復元)したいファイルのストリームを表すSystem.IO.StreamDeserializeメソッドのパラメータに返すと、ファイルから復元されたオブジェクトが返されます。

              この方法でPOP3ホストからメールを削除せずに新着メールのみを取得することができます。
              (注意)UIDの値が他のPOP3ホストと重複することがあり得るため、Pop3ContextはPOP3ホストごとに1ファイル作成するようにして下さい。


              サンプルコード
              [C#]
              System.Runtime.Serialization.IFormatter f = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
              if(System.IO.File.Exists("c:¥¥pop3context.ser"))
              {
                using(System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Open))
                {
                  context = (Exwarp.Net.Pop3.Pop3Context)f.Deserialize(st);
                }
              }
              else
              {
                context = new Exwarp.Net.Pop3.Pop3Context();
              }

              Exwarp.Net.Pop3.Pop3Client pc = new Exwarp.Net.Pop3.Pop3Client("POP3_HOST");
              pc.User = "POP3_USER";
              pc.Pass = "POP3_PASS";
              pc.Context = context;
              pc.Connect();
              pc.ReceiveAllMessages();
              pc.Close();

              using(System.IO.Stream st = new System.IO.FileStream("c:¥¥pop3context.ser",System.IO.FileMode.Create))
              {
                f.Serialize(st,pc.Context);
              }
              | technicals | 12:25 | - | - | - | - |
              PopBeforeSmtp認証を実行する
              0

                SMTPホストによっては、送信前にPOP3サーバーへの認証を完了させておかなければメールの送信が行えないことがあります。こうした認証をPopBeforeSmtpと言います。Exwarp.Net.Pop3.Pop3Clientを使うと簡単にPopBeforeSmtp認証が行えます。

                [C#]
                Exwarp.Net.Pop3.Pop3Client pc = new Exwarp.Net.Pop3.Pop3Client("POP3_HOST");
                pc.User = "USER";
                pc.Pass = "PASSWORD";
                pc.RunCommand("PopBeforeSmtp");
                //pc.RunCommand("PopBeforeSmtp","USER","PASSWORD");

                Exwarp.Net.Smtp.SmtpClient sc = new Exwarp.Net.Smtp.SmtpClient("SMTP_HOST");
                sc.Connect();
                sc.SendReceive(MAIL);
                sc.Close();
                [VB.Net]
                Dim pc As New Exwarp.Net.Pop3.Pop3Client("POP3_HOST")
                pc.User = "USER"
                pc.Pass = "PASS"
                pc.RunCommand("PopBeforeSmtp")
                'pc.RunCommand("PopBeforeSmtp","USER","PASSWORD")

                Dim sc As New Exwarp.Net.Smtp.SmtpClient("SMTP_HOST")
                sc.Connect()
                sc.SendReceive(MAIL)
                sc.Close()
                解説

                POP3_HOSTはPOP3ホストのホスト名、
                SMTP_HOSTはSMTPホストのホスト名を表す文字列、
                USERはPOP3ホストのユーザー名、
                PASSWORDはPOP3ホストのパスワードを表す文字列、
                MAILは送信メールを表すExwarp.Net.Mail.MailMessageの初期化済みインスタンスです。

                PopBeforeSmtp認証を実行するために、Exwarp.Net.Pop3.Pop3ClientPopBeforeSmtpカスタムオペレーションを実行します。このカスタムオペレーションはPOP3ホストへの認証処理のみ実行します。事前にユーザー名とパスワードをPop3Clientインスタンスに設定しておく方法と、PopBeforeSmtpカスタムオペレーションのパラメータとして、ユーザー名とパスワードを設定する二つの方法があります。(サンプルコードにてコメントアウトしている方法が後者です。)
                PopBeforeSmtpカスタムオペレーションはカスタムオペレーション内で、ホストへの接続、切断処理を行いますので、Connect()Close()メソッドを呼び出す必要はありません。(仮にこれらのメソッドをコールしても無視されます。)

                PopBeforeSmtp認証が完了すると、メールの送信が通常どおり行えます。

                | technicals | 15:17 | comments(1570) | trackbacks(0) | - | - |
                Exwarp MailKit 1.0.311.* リリースのお知らせ
                0

                  Exwarp MailKitの最新バージョン1.0.311.*をリリースしました。

                  主な変更点は以下のとおりです。

                  • Pop3Client.SendReceive()メソッドで複数のメールメッセージを指定できるように仕様変更しました。
                    一度の接続で複数のメールメッセージを連続して送信できます。
                  • SmtpClientLocalHostプロパティを追加しました。
                    HELO/EHLO
                  • コマンド送信時にメール送信ホスト名を指定できます。
                    このプロパティに値を設定しない場合、送信ホスト名は省略されます。
                  • mailboxにメールアドレス(addr-spec)が含まれない場合でも、ヘッダーが正しく表示されるように仕様変更しました。
                    この変更により、display-nameのみのFromヘッダーなども解析できます。

                  | information | 18:03 | comments(6692) | trackbacks(0) | - | - |
                  POP3Consoleソースコード公開のお知らせ
                  0

                    現在、POP3コンソールの紹介ページにて、POP3Consoleのソースコードを公開しています。
                    Exwarp MailKitの応用に参考にしてみてください。

                    このソースには、Visual Studio .NET 2002形式のソリューションやリソースファイルなどもすべて含まれています。開発言語はC#ですが、VB.Netプログラマでもほとんどのコードはご理解いただけるはずです。新たにMIMEエンコーディングコンバータも追加した特別エディションです。

                    | information | 18:27 | comments(1662) | trackbacks(0) | - | - |
                    Exwarp MailKit 1.0.300.2 及び Pop3Console リリースのお知らせ
                    0

                      Exwarp MailKit 1.0.300.2がリリースされました。http://exwarp.comからダウンロードできます。

                      Exwarp Mailkit 1.0.291.0 のバグを修正し、微細な仕様変更が加えられています。同時に公開された Pop3Consoleを動作させるためには、この最新バージョンが必要となります。

                      Pop3Consoleは、Pop3プロトコルを手軽に操作できる、フリーソフトです。POP3リクエストに対する応答を確認できます。

                      RETR,TOPコマンド送信時には、メール本文の確認や、添付ファイルの保存も行なうことができます。こちらからダウンロードしてご使用ください。

                      | information | 16:30 | comments(1604) | trackbacks(0) | - | - |
                      バグ報告:POP3のRETRコマンドに対するエラー応答でフリーズ状態になる。
                      0

                        詳細まれにPOP3のRETRコマンドに対するホストからの応答が、メッセージを取得できないというエラーで返される場合がありますが、このエラーステータスが正しく取得できていなかったため、POP3クライアントが無限ループに陥ります。


                        確認された日付2006/7/4


                        アセンブリ名Exwarp.Net.Pop3.dll


                        バージョン1.0.291.0


                        種類バグ


                        状態次期バージョンにて修正済み


                        対処1.0.300.2以降のバージョンにバージョンアップしてください。


                        補足情報1.0.291.0より後のバージョンのReceiveAllMessageカスタムオペレーションに、メールメッセージ受信時に発生したエラーのログを記録するロジックを追加しました。Pop3Client.GetProperty("Errors")を呼び出すことで,エラーが発生したメールのメッセージ番号、UID、エラーメッセージを確認できます。

                        | technicals | 15:02 | comments(1893) | trackbacks(0) | - | - |
                        バグ報告:POP3の例外が正常に発生しない
                        0

                          詳細POP3サーバーから -ERR で始まる否定応答が返された場合に発生するはずのPop3Exceptionが正常に発生しない。


                          確認された日付2006/6/26


                          アセンブリ名Exwarp.Net.Pop3.dll


                          バージョン1.0.291.0


                          種類バグ


                          状態次期バージョンにて修正済み


                          対処1.0.300.2以降のバージョンにバージョンアップしてください。

                          | technicals | 16:30 | comments(1642) | trackbacks(0) | - | - |
                          実験:Exwarpを使って586件のメールを受信する
                          0

                            Exwarp MailKitを使用して、某POP3サーバーにたまっていた586件のメール(すべてテキストメールで添付ファイルなし)を一気に受信してみました。(最下部にスクリーンショットがあります。)

                            フォームにコマンドボタン(button1)とリストボックス(listBox1)を貼り付けて、実行したコードは次のとおりです。


                            HOST_NAMEはホスト名、
                            USERはユーザー名、
                            PASSはパスワードを表すそれぞれ文字列定数です。


                            private System.DateTime begin;

                            private void OnReceiveMail(object o,Exwarp.Net.Mail.MailEventArgs e)
                            {
                                this.listBox1.Items.Add(e.Mail.Subject);
                            }


                            private void AfterReceiveMail(Exwarp.Operations.AsyncOperationState state)
                            {
                                Exwarp.Net.Pop3.Pop3Client client = (Exwarp.Net.Pop3.Pop3Client)state.Target;
                                client.Close();

                                System.TimeSpan span = System.DateTime.Now.Subtract(this.begin);
                                MessageBox.Show(span.TotalSeconds.ToString());
                            }


                            private void button1_Click(object sender, System.EventArgs e)
                            {
                                this.begin = System.DateTime.Now;

                                Exwarp.Net.Pop3.Pop3Client client = new     Exwarp.Net.Pop3.Pop3Client("HOST_NAME");
                                client.User = "USER";
                                client.Pass = "PASS";

                                client.MailMessageReceived += new Exwarp.Net.Mail.MailEventHandler(this.OnReceiveMail);
                                client.Connect();

                                ((Exwarp.Operations.IAsyncCommandOperatable)client).AsyncRunCommand("ReceiveAllMessages",
                                    new Exwarp.Operations.AsyncOperationCallback(this.AfterReceiveMail));
                            }
                            解説

                            非同期にすべてのメールを受信しています。メール受信前の時刻とメール受信後の時刻の差の秒数がメッセージボックスに表示されるようにしました。

                            結果は、"120.46875"というものでした。接続/切断/認証の時間も含めて、1秒間で約4.8件のテキストメールが受信できるという計算になります。


                            大阪・梅田近辺の某ビル内のADSLでインターネットに接続された環境から行いました。


                            | technicals | 16:23 | comments(1756) | trackbacks(0) | - | - |
                            POP3コマンドを操作する(4) TOPコマンド
                            0

                              POP3TOPコマンドを使用すると、メール本文を受信せずにFROMヘッダーの値やSubjectヘッダーの内容を確認することができます。メールチェッカーなどで使用すると大変便利な機能です。

                              TOPRETRコマンドの実行はTRANSACTION状態(ホストへのログインが正常に行われた状態)で行ってください。

                              [C#]
                              Exwarp.Net.Pop3.Pop3Response response;
                              response = (Exwarp.Net.Pop3.Pop3Response)client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("TOP 1 10¥r¥n"));
                              Exwarp.Net.Mail.MailMessage mail = response.MailMessage;
                              if(mail != null)
                              {
                                  //ANY PROCESS
                              }
                              [VB.Net]
                              Dim response As Exwarp.Net.Pop3.Pop3Response
                              response = CType(client.SendReceive(New Exwarp.Net.Pop3Request("TOP 1 10" & vbCrLf)), _
                                  Exwarp.Net.Pop3.Pop3Response)
                              Dim mail As Exwarp.Net.Mail.MailMessage = response.MailMessage
                              If Not(mail Is Nothing) Then
                                  'ANY PROCESS
                              End If
                              解説

                              clientはPOP3ホストへ接続済みのExwarp.Net.Pop3.Pop3Clientインスタンスを表します。このインスタンスの生成方法についてはこちらを参照してください。

                              Pop3ClientSendReceive()メソッドを使用して、ホストへリクエストを送信します。Pop3RequestオブジェクトはPOP3コマンドをカプセル化します。ホストからの応答をExwarp.Net.Pop3.Pop3Response型にキャストします。(C#では変換演算子、VB.NetではCType関数を使います。)

                              TOPコマンドとRETRコマンドを実行すると、Pop3Clientオブジェクトは応答メッセージをカプセル化したPop3ResponseオブジェクトのMailMessageプロパティにExwarp.Net.Mail.MailMessageのインスタンスを自動的にセットします。TOPコマンドを実行した場合は、ヘッダーのみのメールメッセージが生成されています。このオブジェクトを使ってメールのメタ情報を取得することができます。

                              TOPコマンドは2つのパラメータを受け取ります。一つ目のパラメータはメッセージ番号です。二つ目のパラメータは受け取りたいメッセージの行数を表します。

                              TOPコマンドにメッセージ行数を指定すると設定された行数分のメッセージが返されます。返されたメッセージはMailMessageBodyプロパティで取得することができます。

                              | technicals | 14:41 | comments(1772) | trackbacks(0) | - | - |
                              POP3コマンドを操作する(3) UIDL,LISTコマンド
                              0

                                POP3コマンドの中には応答にリストが含むものがあります。たとえばUIDLコマンドはホストに届いているメールの一意な番号のリストを返します。こうしたリストはPop3ResponseオブジェクトのStatusプロパティを解析すれば取得できますが、今回はリスト型の応答を取得する別の方法を紹介します。

                                UIDLLISTコマンドの実行はTRANSACTION状態(ホストへのログインが正常に行われた状態)で行ってください。

                                [C#]
                                Exwarp.Net.RFC.IResponseMessage response;
                                response = (Exwarp.Net.Pop3.Pop3Response)client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("UIDL¥r¥n"));

                                object o = response.GetProperty("Uidl");

                                if(o != null)
                                {
                                    System.Collections.IList uidl = (System.Collections.IList)o;
                                }
                                [VB.Net]
                                Dim response As Exwarp.Net.Pop3.Pop3Response
                                response = CType(client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("UIDL" & vbCrLf)), _
                                    Exwarp.Net.Pop3.Pop3Response)

                                Dim o As Object = response.GetProperty("Uidl")
                                Dim uidl As System.Collections.IList

                                If Not(o Is Nothing) Then
                                    uidl = CType(o,System.Collections.IList)
                                End If
                                解説

                                clientはPOP3ホストへ接続済みのExwarp.Net.Pop3.Pop3Clientインスタンスを表します。このインスタンスの生成方法についてはこちらを参照してください。

                                UIDLなどのコマンドを送信するとPOP3サーバーはリストを含む応答を返します。この応答を取得するには、Pop3ResponseオブジェクトのStatusプロパティの値を解析すればいいですが、Pop3ResponseオブジェクトのGetProperty()メソッドを使用してSystem.Collection.IList型のリストを取得することもできます。

                                GetProperty()メソッドはカスタムプロパティの値を取得します。このメソッドはカスタムプロパティ名を表す文字列型のパラメータを一つ受け取ります。Pop3ClientオブジェクトはUIDLコマンドに対する応答を受け取った際、自動的にPop3ResponseオブジェクトにUidlカスタムプロパティを追加します。このリストを使ってすべてのメールの一意な番号を取得することができます。

                                同じ事がLISTコマンドにも当てはまります。LISTコマンド実行後、Pop3ResponseオブジェクトにはListカスタムプロパティが追加されます。

                                | technicals | 18:49 | comments(1327) | trackbacks(0) | - | - |
                                POP3コマンドを操作する(2)
                                0

                                  POP3のSTATコマンドを使用してPOP3サーバーに届いているメールの状況を確認します。

                                  [C#]
                                  Exwarp.Net.RFC.IResponseMessage response;
                                  response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("STAT¥r¥n"));
                                  System.Diangnostics.Debug.WriteLine(((Exwarp.Net.Pop3.Pop3Response)response).Status);
                                  [VB.Net]
                                  Dim response As Exwarp.Net.RFC.IResponseMessage
                                  response = clinet.SendReceive(new Exwarp.Net.Pop3.Pop3Request("STAT" & vbCrLf))
                                  System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Pop3.Pop3Response).Status)
                                  解説

                                  clientはPOP3ホストへ接続済みのExwarp.Net.Pop3.Pop3Clientのインスタンスを表します。このインスタンスの生成方法、およびホストへの接続方法についてはこちらを参照してください。

                                  SendReceive()メソッドを使用してホストへコマンドを送信します。STATコマンドは現在のPOP3サーバーのメールの状況を問い合わせるコマンドです。パラメータを渡さない場合、メールボックス全体のステータスが取得できます。パラメータにメール番号をセットする場合、特定のメールのステータスが取得できます。今回はパラメータなしでコマンド送信しています。

                                  Pop3ClientExwarp.Net.RFC.IResponseMessage型の結果を返します。これをExwarp.Net.Pop3.Pop3Response型にキャストすることでPOP3固有の情報を取得できます。

                                  Statusプロパティを使ってホストからの応答を表す文字列を取得できます。この文字列を解析すると何件のメッセージが現在届いていて、合計何オクテット(バイト)かが分かります。

                                  | technicals | 17:43 | comments(1765) | trackbacks(0) | - | - |
                                  POP3コマンドを操作する
                                  0

                                    Exwarpではホストとの通信処理をカスタムオペレーションによって自動化していますが、いろいろなプロトコルを直接操作することもできます。今回はPOP3コマンドの操作方法を説明します。

                                    POP3コマンドを扱うために、Exwarp.Net.Pop3.Pop3Client,Exwarp.Net.Pop3.Pop3Request及びExwarp.Net.Pop3.Pop3Responseオブジェクトを使用します。

                                    HOST_NAMEはホスト名,
                                    USER_NAMEはPOP3ホストにログオンするユーザー名,
                                    PASSWORDはパスワードを表す文字列です。

                                    [C#]
                                    Exwarp.Net.Pop3.Pop3Client client = new Exwarp.Net.Pop3.Pop3Client("HOST_NAME");
                                    Exwarp.Net.RFC.IResponseMessage response = null;

                                    client.Connect();

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request(""));
                                    System.Diagnostics.Debug.WriteLine(((Exwarp.Net.Pop3.Pop3Response)response).Status);

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("USER USER_NAME¥r¥n"));
                                    System.Diagnostics.Debug.WriteLine(((Exwarp.Net.Pop3.Pop3Response)response).Status);

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("PASS PASSWORD¥r¥n"));
                                    System.Diagnostics.Debug.WriteLine(((Exwarp.Net.Pop3.Pop3Response)response).Status);

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("QUIT¥r¥n"));
                                    System.Diagnostics.Debug.WriteLine(((Exwarp.Net.Pop3.Pop3Response)response).Status);

                                    client.Close();
                                    [VB.Net]
                                    Dim client As New Exwarp.Net.Pop3.Pop3Client("HOST_NAME")
                                    Dim response As Exwarp.Net.RFC.IResponseMessage = Nothing

                                    client.Connect()

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request(""))
                                    System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Pop3.Pop3Response).Status)

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("USER USER_NAME" & vbCrLf))
                                    System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Pop3.Pop3Response).Status)

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("PASS PASSWORD" & vbCrLf))
                                    System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Pop3.Pop3Response).Status)

                                    response = client.SendReceive(new Exwarp.Net.Pop3.Pop3Request("QUIT" & vbCrLf))
                                    System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Pop3.Pop3Response).Status)

                                    client.Close()
                                    解説

                                    Exwarp.Net.Pop3.Pop3Clientの新しいインスタンスを生成します。コンストラクタはこのインスタンスが接続するホスト名を表す文字列を受け取ります。

                                    Connect()メソッドでホストに接続します。

                                    Pop3ClientSendReceive()メソッドを使ってホストにコマンドを送信します。送信するコマンドはExwarp.Net.Pop3.Pop3Requestオブジェクトを使用してカプセル化します。コンストラクタに送信したいPOP3コマンドを表す文字列を設定します。この際必ずCR/LFを末尾に付加します。長さ0の文字列はホストからの受信処理のみを行いたい場合に利用します。

                                    SendReceive()メソッドを実行するとPop3ClientExwarp.Net.RFC.IResponseMessage(インターフェース)型のリクエストを返します。このオブジェクトを使ってホストからの応答メッセージを取得できます。Pop3Clinetが返すレスポンスは正確にはExwarp.Net.Pop3.Pop3Response型なので、この型にキャストするとPOP3応答固有の情報を取得することができます。

                                    Pop3ResponseオブジェクトのStatusプロパティを使ってサーバーから返された応答に含まれるステータスラインを取得できます。

                                    今回のサンプルでは空のリクエスト、USER/PASSコマンド、及びQUITコマンドを送信してその応答をデバッグウィンドウに表示しています。

                                    | technicals | 17:17 | comments(1814) | trackbacks(0) | - | - |
                                    Exwarpを使ったメール受信(3)
                                    0

                                      大量のメールを受信する場合、通常のRunCommand()メソッドではメール受信が完了するまで、次の操作を実行できません。ここではメールを非同期に受信する方法を解説します。

                                      非同期にメールを受信するためにAsyncRunCommand()メソッドを使用します。

                                      HOST_NAME はホスト名、
                                      USER はユーザー名、
                                      PASS はパスワードを表すそれぞれ文字列です。

                                      [C#]
                                      private void AfterReceiveMessage(Exwarp.Operations.AsyncOperationState state)
                                      {
                                          Exwarp.Net.Pop3.Pop3Client client = (Exwarp.Net.Pop3.Pop3Client)state.Target;
                                          client.Close();
                                      }





                                      private void OnReceiveMessage(object sender,Exwarp.Net.Mail.MailEventArgs e)
                                      {
                                          Exwarp.Net.Mail.MailMessage mail = e.Mail;
                                          System.Diagnostics.Debug.WriteLine(mail.Subject);
                                      }




                                      private void ReceiveMail()
                                      {
                                          Exwarp.Net.Pop3.Pop3Client client = new Exwarp.Net.Pop3.Pop3Client("HOST_NAME");

                                          client.User = "USER";
                                          client.Pass = "PASS";

                                          client.MailMessageReceived +=
                                              new Exwarp.Net.Mail.MailEventHandler(this.OnReceiveMessage);

                                          Exwarp.Operations.IAsyncCommandOperatable async =
                                              (Exwarp.Operations.IAsyncCommandOperatable)client;

                                          Exwarp.Operations.AsyncOperationCallback callback =
                                              new Exwarp.Operations.AsyncOperationCallback(this.AfterReceiveMessage);

                                          client.Connect();
                                          async.AsyncRunCommand("ReceiveAllMessages",callback);
                                      }

                                      解説

                                      Exwarp.Net.Pop3.Pop3ClientクラスのMailMessageReceivedイベントは、メールメッセージを受信するごとに発生するイベントです。

                                      このイベントにイベント処理を行うメソッドを定義して関連付けることでメールを受信するたびにカスタムプロセスを実行できるようになります。今回のサンプルでは、OnReceiveMessageというメソッドを定義しています。

                                      このメソッドは、object型のイベント送信元の参照と、Exwarp.Net.Mail.MailEventArgs型のイベントデータを受け取ります。このイベントデータのMailプロパティから受信されたメールメッセージを取得することができます。

                                      Connect()メソッドでホストに接続します。

                                      ReceiveAllMessagesカスタムオペレーションを実行してホストからメールをすべて受信しますが、この際RunCommand()メソッドではなく、AsyncRunCommand()メソッドを呼び出します。このメソッドはカスタムオペレーションを非同期に実行します。AsyncRunCommand()メソッドは通常隠蔽(いんぺい)されているためExwarp.Operations.IAsyncCommandOperatable型にキャストしなければ呼び出すことはできません。

                                      AsyncRunCommand()メソッドの一つ目のパラメータは実行するカスタムオペレーション名を表す文字列です。二つ目のパラメータに非同期受信実行後に呼び出したいコールバック関数(今回のサンプルではAfterReceiveMessage())を設定します。今回のサンプルでは非同期受信が終了してからホストとの接続を切断する必要があるため,コールバック関数内で接続の切断処理を記述しています。このコールバック関数はExwarp.Operations.AsyncOperationState型のパラメータを1つ受け取ります。このパラメータのTargetプロパティは非同期処理を実行したオブジェクトへの参照をObject型で返しますので、Exwarp.Net.Pop3.Pop3Client型にキャストしてClose()メソッドを呼び出し接続を切断します。

                                      | technicals | 18:02 | comments(1878) | trackbacks(0) | - | - |
                                      Exwarpを使ってメール受信(2)
                                      0
                                        Exwarp を使用してPOP3サーバーからメールを受信するサンプルです。

                                        今回はイベントを利用したメール受信を紹介します。

                                        HOST_NAME はホスト名、
                                        USER はユーザー名、
                                        PASS はパスワードを表すそれぞれ文字列です。

                                        [C#]
                                        private void AfterReceiveMessage(object sender,Exwarp.Net.Mail.MailEventArgs e)
                                        {
                                            Exwarp.Net.Mail.MailMessage mail = e.Mail;
                                            System.Diagnostics.Debug.WriteLine(mail.Subject);
                                        }




                                        private void ReceiveMail()
                                        {
                                            Exwarp.Net.Pop3.Pop3Client client = new Exwarp.Net.Pop3.Pop3Client("HOST_NAME");

                                            client.User = "USER";
                                            client.Pass = "PASS";

                                            client.MailMessageReceived +=
                                                new Exwarp.Net.Mail.MailEventHandler(this.AfterReceiveMessage);

                                            client.Connect();
                                            client.RunCommand("ReceiveAllMessages");
                                            client.Close();
                                        }

                                        解説

                                        Exwarp.Net.Pop3.Pop3ClientクラスのMailMessageReceivedイベントは、メールメッセージを受信するごとに発生するイベントです。

                                        このイベントにイベント処理を行うメソッドを定義して関連付けることでメールを受信するたびにカスタムプロセスを実行できるようになります。今回のサンプルでは、AfterReceiveMessageというメソッドを定義しています。

                                        このメソッドは、object型のイベントを送信元の参照と、Exwarp.Net.Mail.MailEventArgs型のイベントデータを受け取ります。このイベントデータのMailプロパティから受信されたメールメッセージを取得することができます。

                                        | technicals | 12:45 | comments(1819) | trackbacks(0) | - | - |
                                        Exwarp を使ってメール受信
                                        0
                                          Exwarp を使用してPOP3サーバーからメールを受信するサンプルです。

                                          HOST_NAME はホスト名
                                          USER はユーザー名
                                          PASS はパスワードを表す文字列です。


                                          [C#]
                                          Exwarp.Net.Pop3.Pop3Client client = new Exwarp.Net.Pop3.Pop3Client("HOST_NAME");

                                          client.User = "USER";
                                          client.Pass = "PASS";

                                          client.Connect();
                                          client.RunCommand("ReceiveAllMessages");
                                          client.Close();

                                          Exwarp.Net.Mail.MailMessageCollection mails = client.ReceivedMessages;

                                          foreach(Exwarp.Net.Mail.MailMessage mail in mails)
                                          {
                                              System.Diagnostics.Debug.WriteLine(mail.Subject);
                                          }


                                          [VB.Net]
                                          Dim mail As Exwarp.Net.Mail.MailMessage
                                          Dim mails As Exwarp.Net.Mail.MailMessageCollection
                                          Dim client As New Exwarp.Net.Pop3.Pop3Client("HOST_NAME")

                                          client.User = "USER"
                                          client.Pass = "PASS"

                                          client.Connect()
                                          client.RunCommand("ReceiveAllMessages")
                                          client.Close()

                                          mails = client.ReceivedMessages
                                          For Each mail In mails
                                            System.Diagnostics.Debug.WriteLine(mail.Subject)
                                          Next

                                          解説

                                          Exwarp.Net.Pop3.Pop3Clientクラスを利用してメールの受信を行います。ReceiveAllMessagesカスタムオペレーションはPOP3サーバーへのコマンドの送出を自動的に行うカスタムオペレーションです。

                                          受信が完了するとPop3ClientのReceivedMessagesプロパティに受信済みメッセージのリストが格納されます。このリストを列挙するとすべての受信メッセージを参照することができます。

                                          | technicals | 13:02 | comments(1829) | trackbacks(0) | - | - |