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

11
--
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
--
>>
<<
--

メール

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

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


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

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

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

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


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


    pop3client.setProperty(“RetrLimit”,1);


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

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


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

    pop3client.Socket

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

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


    | technicals | 14:36 | - | - | - | - |
    絵文字付のメールを作成する
    0

      ExwarpMailKit1.0.438.*以降のライブラリ+Exwarp.Module.EmojiModuleを利用すると、絵文字を簡単に作成することができます。


      最新版をダウンロードしてください。


      [C#]
      Exwarp.Net.RFC.MIME.MIMETransform.RawEncoding = true; //(0)

      Exwarp.Net.Mail.MailMessage mail = new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.ASCII); //(1)

      Exwarp.Module.ModuleLoader ml = new Exwarp.Module.ModuleLoader(mail); //(2)
      ml.LoadModule("Exwarp.Module.EmojiModule.dll"); //(3)

      mail.To = "mail_to@docomo.ne.jp"; //(4)
      mail.From = "mail_from@myhost.com";

      mail.RunCommand("Emoji_SetSubject","<emoji:1>絵文字メール"); //(5)
      mail.RunCommand("Emoji_SetBody","<emoji:100>絵文字本文"); //(6)

      Exwarp.Net.Smtp.SmtpClient client = new Exwarp.Net.Smtp.SmtpClient("HOST_NAME");
      if(client.Connect())
      {
        client.SendReceive(mail);
        client.Close();
      }

      [VB.NET]
      Exwarp.Net.RFC.MIME.MIMETransform.RawEncoding = True '(0)

      Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.ASCII) '(1)

      Dim ml As New Exwarp.Module.ModuleLoader(mail) '(2)
      ml.LoadModule("Exwarp.Module.EmojiModule.dll") '(3)

      mail.To = "mail_to@docomo.ne.jp" '(4)
      mail.From = "mail_from@myhost.com"

      mail.RunCommand("Emoji_SetSubject","<emoji:1>絵文字メール") '(5)
      mail.RunCommand("Emoji_SetBody","<emoji:100>絵文字本文") '(6)
      Dim client As New Exwarp.Net.Smtp.SmtpClient("HOST_NAME")
      If client.Connect() Then
        client.SendReceive(mail)
        client.Close()
      End If

      [解説]
      (0)Exwarp.Net.RFC.MIME.MIMETransformのRawEncodingプロパティにTrueをセットします。
      これは、1.0.438より前のバージョンでau携帯への絵文字付の件名が表示されないバグに対処するために必要です。

      (1)Exwarp.Net.Mail.MailMessageのインスタンスを作成します。このときのエンコーディングは何でもOKです。

      (2)Exwarp.Module.ModuleLoaderのインスタンスを作成します。このときパラメータにモジュールを追加したいMailMessageインスタンスを渡します。

      (3)LoadModuleメソッドを呼び出して、モジュールをロードします。
      モジュールdllへのパスを表す文字列をセットします。実行ファイルと同じディレクトリにコピーしておくとファイル名だけで済むのでお勧めです。(別にモジュールの位置はどこでも構いません。参照を追加しておく必要もありません。)

      (4)必ず最初にMailMessageToプロパティをセットしておきます。この値を元に絵文字データが変換されます。

      (5)モジュールをロードするとEmoji_SetSubjectカスタムオペレーションが実行できるようになります。通常の文字列の任意の場所に<emoji:***>と記述すると内部でバイナリに自動変換します。(***の部分はdocomoの絵文字番号を入力します。)

      (6)(5)と同じ要領でEmoji_SetBodyカスタムオペレーションを実行します。絵文字の挿入方法は同じです。

      あとは通常のメール送信を行います。特別な操作は必要ありません。


      追加事項

      Emoji_SetSubjectおよびEmoji_SetBodyカスタムオペレーションに2番目の引数をセットすることができます。これは任意の絵文字変換テーブルファイルへのパスを表す文字列です。
      mail.RunCommand("Emoji_SetBody","<emoji:1>","MyEmojiTable.txt")

      上の様に記述すると、デフォルトの変換テーブルではなく、自由にカスタマイズした変換テーブルを使って絵文字の変換が行われます。
      デフォルトの変換テーブルは、こちらからダウンロードできます。
      絵文字コードは必ず半角大文字の英数4桁タブ区切りで記述します。
      docomo,softbankは必ずShift-JISバイナリ用コード、auはEメール送出用JISコードに対応したShift-JISコードを記述します。
      176以上の番号を設定することも可能ですが、上限は999です。


      注意事項

      メールの宛先はひとつに限定するか、同じキャリアのメールアドレスを設定してください。
      絵文字によっては表示されないものがあります。これはdocomoの絵文字番号を元にほかのキャリアの絵文字の中からよく似た絵文字に変換しているためで、該当する絵文字が存在しない番号は欠番となります。
      | technicals | 17:34 | - | - | - | - |
      Exwarp MailKit 1.0.406.*リリースのお知らせ
      0
        ExwarpMailKit1.0.406.*をリリースいたしました。
        主な変更点は次のとおりです。
        ■Exwarp.Net.RFC.MIME.MIMETransform.SafeModeプロパティ(STATICプロパティ)を追加しました。これは一部のSMTPサーバーがメールのリレー時に?=の後ろに強制的にホワイトスペースを追加する仕様に対処するために使用します。上記プロパティをTrueに設定した場合、ASCII文字列も強制的にMIMEエンコードして?= =?が出現しなくなります。
        ■Exwarp.Net.Mail.MailOperations.GetAttachmentsOperationクラスの仕様を一部修正いたしました。
        これは一部のメールエージェントが本文なしのメールを送信してきた場合でも添付ファイルの取得を可能にするためです。本仕様変更により、Content-Typeがmultipart/mixedであり、サブコンテンツにtext/*が含まれない場合でもGetAttachmentsカスタムオペレーションで添付ファイルを取得できるようになります。
        | information | 16:40 | - | - | - | - |
        【質問】1件づつメールをサーバより削除する方法はどのようにするのでしょうか?
        0
          メールをどのタイミングで削除するのかにより、手順が異なりますが以下の2通りの場面について解説いたします。

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

          ■メールの受信とは別にサーバーからメールを削除する
          この場合、こちらにカスタムオペレーションのソースコードを公開しておりますので、ご参考になってください。
          本カスタムオペレーションを実行すると、メールサーバーからすべてのメールを1件ずつ削除することができます。削除するメールを判別しながら削除するなどの処理を実行したい場合は、ソースコードに必要な条件式を入力していただくことで対応可能です。
          | technicals | 17:03 | - | - | - | - |
          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) | - | - |
            メールにバイナリ形式などの特殊な本文を含める
            0

              RFCの規定では、メールの本文はどんな形式でもかまわないことになっています。テキストやhtml形式などは一般的ですが、画像データを本文として扱うこともできます。Exwarpはこのような特殊な本文の追加も簡単に実現します。

              BINDATAはバイナリデータを表すByte配列を表します。

              [C#]
              Exwarp.Net.Mail.MailMessage mail =
                  new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding(iso-2022-jp"));
              mail.Body = "これが本文のテキストです。";

              Exwarp.Net.RFC.MIME.MIMEContentMessage content =
                  new Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Encoding.ASCII);
              content.ContentType = "image/jpeg";
              content.BinaryBody = BINDATA;

              mail.RunCommand("AddMailMessage",content);
              [VB.Net]
              Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))
              mail.Body = "これが本文のテキストです。"

              Dim content As New Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Encoding.ASCII)
              content.ContentType = "image/jpeg"
              content.BinaryBody = BINDATA

              mail.RunCommand("AddMailMessage",content)
              解説

              MailMessageの新しいインスタンスを作成します。コンストラクタは、メッセージに適用される文字セットを表すSystem.Text.Encodingを受け取ります。通常iso-2022-jpが使用されます。

              次にメールにテキストの本文を追加します。MailMessageBodyプロパティに本文を表す文字列を設定します。

              特殊な本文をカプセル化するために、Exwarp.Net.RFC.MIME.MIMEContentMessageのインスタンスを作成します。コンストラクタはこのメッセージに適用される文字セットを表すSystem.Text.Encodingを受け取ります。バイナリ形式の本文のため,基本的に文字セットは関係ありませんので、US-ASCII(ASCII)を設定します。

              次にバイナリ形式の本文を設定します。BinaryBodyプロパティにバイナリデータを表すByte配列をセットします。通常の設定では、自動的にBase64エンコード処理されます。バイナリデータを設定したら,AddMailMessageカスタムオペレーションを使用して,メールに本文を追加します。このカスタムオペレーションは本文のコンテンツを表すExwarp.Net.RFC.MIME.MIMEContentMessageを受け取ります。

              MailMessageMessageSourceプロパティを参照すると、次のようなバイト列を確認できます。(*****は削除してあります。)

              MIME-Version: 1.0
              Message-ID: <20060704173042_5cf58a1a@*****>
              Content-Type: multipart/alternative;
                  boundary="__NEXTPART_20060704_6FAB76BB_35387A18"

              This is a multipart message in MIME format.

              --__NEXTPART_20060704_6FAB76BB_35387A18
              Content-Type: text/plain; charset=iso-2022-jp
              Content-Transfer-Encoding: 7bit

              ・$B$3$l$,K¥J8$N%F%-%9%H$G$9!#・(B
              --__NEXTPART_20060704_6FAB76BB_35387A18
              Content-Type: image/jpeg
              Content-Transfer-Encoding: base64

              /9j/4AAQSkZJRgABAgAAZABkAAD//gASQWRvYmUgSW1hZ2VSZWFkef/sABFE
              *****
              jan8/wCCEISjPsUQ+SlNtRZ9LoQg5oGR4qPp/wAkqd0IQl7vcv/Z

              --__NEXTPART_20060704_6FAB76BB_35387A18--

              このような特殊なメッセージボディをメールに含めても、メールを受信する側のエージェント(メーラー)では正しく表示できないことがほとんどですが、PDFやPostScriptなどの一部の形式はメール本文としては適切かも知れません。

              | technicals | 17:28 | comments(1750) | 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) | - | - |
                カスタムオペレーションフォーラム開設のお知らせ
                0

                  このたびExwarpをさらに便利に使いやすくしていただくために、CustomOperation Forumを開設いたしました。
                  URLはhttp://exwarp.com/member/useroperations.phpです。ぜひ一度ご覧ください。

                  このフォーラムを通じて、より多くのカスタムオペレーションをExwarpユーザーの皆さんに作成していただき、それをできるだけ多くの方に使っていただきたいと考えております。

                  ここでは、自作カスタムオペレーションのソースを公開します。便利だと思うものがあれば、自分のアプリケーションに組み込んですぐに使うことができます。サンプルとして、

                  • 指定したメディアタイプの添付ファイルだけを削除するカスタムオペレーション
                  • ヘッダーのみのメールを受信するカスタムオペレーション
                  のソースコードが公開されています。

                  たくさんのカスタムオペレーションを作成して投稿してください。

                  | information | 23:27 | comments(1551) | trackbacks(0) | - | - |
                  RFC準拠の複雑なメールアドレスの妥当性を検証する
                  0

                    RFC2822では、"in(nested(comment))fo"@[192.168.0.1]のようなアドレス表記も許可されますが、Exwarpを使うとこのような複雑なメールアドレスの妥当性の評価も簡単に行えます。

                    [C#]
                    bool ret = (bool)mail.RunCommand("ValidateEmailAddress","¥"in(nested(comment))fo¥"@[192.168.0.1]");
                    解説

                    mailは、Exwarp.Net.Mail.MailMessageインスタンスを表します。

                    ValidateEmailAddressカスタムオペレーションはメールアドレスの妥当性を検証します。このカスタムオペレーションは検証対象となるメールアドレスを表す文字列型パラメータを一つ受け取ります。妥当なメールアドレスである場合は、true、それ以外の場合はfalseを返します。カスタムオペレーションは戻り値をすべてObject型で返しますので、論理型へのキャストが必要です。

                    RFCの規定では、メールアドレスの@より左の部分には、"を使って引用句として扱えばどんな文字でも含められることになっています。ですから"info@"@mail.comのように@さえ使用することができます。また、()を使ってコメントを含めることも許可されています。コメントはネストしても構わないことになっています。さらに、@より右の部分では、[]を使って、IPアドレスのようにドメイン表記できるとも記されています。

                    Exwarpはこれらの複雑なメールアドレスも正しく評価できます。

                    ValidateEmailAddressカスタムオペレーションは、Exwarp.Operation.ICommandOperatableインターフェースを実装するオブジェクトで実行できますが、このカスタムオペレーションがデフォルトで定義されているのは、MailMessageだけです。そのほかのオブジェクトでこのカスタムオペレーションを実行する場合、AddOperation()メソッドを使用してカスタムオペレーションの追加処理を行う必要があります。詳しくはこちらを参照してください。

                    ValidateEmailAddressカスタムオペレーションは検証するメールアドレスが実際に存在するかどうかは確認しません。RFCの規定に従った妥当な文字列かどうかを判断するだけです。

                    | technicals | 11:33 | comments(1483) | trackbacks(0) | - | - |
                    メールの添付メッセージを削除する
                    0

                      メールメッセージに含まれる添付ファイルを削除するには、RemoveAttachmentカスタムオペレーションを使用します。今回はすべての添付ファイルを削除するサンプルを紹介します。

                      [C#]
                      object atts = mail.RunCommand("GetAttachments");
                      if(atts != null)
                      {
                          foreach(object att in (System.Collections.IEnumerable)atts)
                          {
                              mail.RunCommand("RemoveAttachment",att);
                          }
                      }
                      [VB.Net]
                      Dim atts() As Object = mail.RunCommand("GetAttachments")

                      If Not(atts Is Nothing) Then
                          Dim att As Object
                          For Each att In CType(atts,System.Collections.IEnumerable)
                              mail.RunCommand("RemoveAttachment",att)
                          Next
                      End If
                      解説

                      mailExwarp.Net.Mail.MailMessageのインスタンスを表します。このインスタンスの取得方法については、こちらを参照してください。

                      すべての添付ファイルを削除するために、まずGetAttachmentsカスタムオペレーションを使用して、削除対象となる添付メッセージの配列を取得します。この配列を列挙しながら、MailMessageRemoveAttachmentカスタムオペレーションを実行します。

                      RemoveAttachmentカスタムオペレーションは削除する添付メッセージを表すExwarp.Net.RFC.MIME.MIMEContentMessage型のパラメータを一つ受け取ります。今回はキャストせずにObject型のまま渡しています。

                      | technicals | 23:19 | comments(1932) | trackbacks(0) | - | - |
                      バグ報告:GetForwardingカスタムオペレーションが正しく動作しない。
                      0

                        詳細Exwarp.Net.Mail.MailOperations.GetForwardingカスタムオペレーションを実行する際、 Exwarp.Net.Mail.MailContextオブジェクトのQuoteOriginalMessageプロパティがfalseの場合、nullを返してしまう。


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


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


                        バージョン1.0.291.0


                        種類バグ


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


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

                        | technicals | 11:29 | comments(1670) | trackbacks(0) | - | - |
                        返信メールを自動作成する
                        0

                          返信メールの作成はGetReplyカスタムオペレーションを使用します。GetReplyカスタムオペレーションを呼び出すためには、MailContextSenderMailAddressプロパティに自分のメールアドレスを設定しておく必要があります。

                          [C#]
                          Exwarp.Net.Mail.MailContext context = Exwarp.Net.Mail.MailContext.GetContext();
                          context.SenderMailAddress = "myaddress@mail.com";

                          Exwarp.Net.Mail.MailMessage reply =
                              (Exwarp.Net.Mail.MailMessage)mail.RunCommand("GetReply");
                          [VB.Net]
                          Dim context As Exwarp.Net.Mail.MailContext = Exwarp.Net.Mail.MailContext.GetContext()
                          context.SenderMailAddress = "myaddress@mail.com"

                          Dim reply As Exwarp.Net.Mail.MailMessage = _
                              CType(mail.RunCommand("GetReply"),Exwarp.Net.Mail.MailMessage)
                          解説

                          mailExwarp.Net.Mail.MailMessageのインスタンスを表します。このインスタンスの生成方法、メールメッセージの受信方法についてはこちらを参照してください。

                          返信メールを自動作成するためにはGetReplyカスタムオペレーションを実行しますが、このオペレーションを実行する前にMailContextSenderMailAddressプロパティを設定する必要があります。

                          MailContextオブジェクトの取得は、Exwarp.Net.Mail.MailContextGetContext()スタティックメソッドをコールします。このメソッドは現在のメール設定をカプセル化するExwarp.Net.Mail.MailContextオブジェクトを返します。

                          取得したコンテキストのSenderMailAddressプロパティに自分のメールアドレスを設定します。

                          MailMessageに定義されているGetRepllyカスタムオペレーションを実行します。このカスタムオペレーションは、返信メールを表すExwarp.Net.Mail.MailMessageオブジェクトを返します。(カスタムオペレーションは戻り値をすべてObject型で返しますので,適切な変換が必要です。)

                          デフォルトでは返信メッセージには元のメールの本文が引用されていません。引用された返信メッセージを作成したい場合には、GetReplyカスタムオペレーションを呼び出す前にMailContextQuoteOriginalMessageプロパティをtrueに設定します。

                          | technicals | 16:11 | comments(1643) | trackbacks(0) | - | - |
                          SMTPコマンドを操作する
                          0

                            Exwarpでは、メール送信のほとんどの処理をカスタムオペレーションで自動化していますが、SMTPコマンドを直接操作することもできます。SMTPコマンドの操作にはExwarp.Net.Smtp.SmtpClient,Exwarp.Net.Smtp.SmtpRequest及びExwarp.Net.Smtp.SmtpResponseを使用します。

                            [C#]
                            Exwarp.Net.Smtp.SmtpClient client =
                                new Exwarp.Net.Smtp.SmtpClient("HOST_NAME");

                            client.Connect();

                            Exwarp.Net.RFC.IResponseMessage response = null;

                            response = client.SendReceive(new Exwarp.Net.Smtp.SmtpRequest("HELO¥r¥n"));
                            System.Diagnostics.Debug.WriteLine(((Exwarp.Net.Smtp.SmtpResponse)response).Status);

                            client.Close();
                            [VB.Net]
                            Dim client As New Exwarp.Net.Smtp.SmtpClient("HOST_NAME")

                            client.Connect();

                            Dim response As Exwarp.Net.RFC.IResponseMessage = Nothing

                            response = clinet.SendReceive(New Exwarp.Net.Smtp.SmtpRequest("HELO" & vbCrLf))
                            System.Diagnostics.Debug.WriteLine(CType(response,Exwarp.Net.Smtp.SmtpResponse).Status)

                            client.Close()
                            解説

                            SMTPコマンドを操作するためにExwarp.Net.Smtp.SmtpClientのインスタンスを生成します。コンストラクタにホスト名を表す文字列を受け取ります。

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

                            SendReceive()メソッドを使用してSMTPコマンドを送信します。送信するSMTPコマンドはExwarp.Net.Smtp.SmtpRequestオブジェクトがカプセル化します。コンストラクタに送信したいSMTPコマンドを表す文字列を設定します。この際必ず末尾にCR/LFを付加します。

                            SendReceive()メソッドはExwarp.Net.RFC.IResponseMessage(インターフェース)型の戻り値を返します。このオブジェクトはホストからの応答をカプセル化しています。厳密にはExwarp.Net.Smtp.SmtpResponse型のオブジェクトが返されますので,キャストしてSMTP応答の詳細な情報が取得できます。

                            SmtpResponseオブジェクトのStatusプロパティからSMTPホストの応答メッセージ(ステータスライン)を表す文字列が取得できます。拡張SMTPの複数行応答にも対応していますので、HELOコマンドの代わりにEHLOコマンドを使うこともできます。この場合ホストは挨拶メッセージに加えてホストがサポートしている拡張SMTPメソッドの一覧を返します。

                            | technicals | 19:10 | comments(1831) | trackbacks(0) | - | - |
                            eml形式のメールをインポートする
                            0

                              拡張子が".eml"のファイルをインポートすると、メールメッセージの解析などを行うことができます。eml形式のメッセージをインポートするにはLoadFromFileカスタムオペレーションを使用します。

                              [C#]
                              Exwarp.Net.Mail.MailMessage mail =
                                  new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.ASCII);
                              mail.RunCommand("LoadFromFile","c:¥¥mail.eml");
                              [VB.Net]
                              Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.ASCII)
                              mail.RunCommand("LoadFromFile","c:¥mail.eml")
                              解説

                              メールをインポートするExwarp.Net.Mail.MailMessageインスタンスを作成します。コンストラクタは必ず文字セットを表すSystem.Text.Encodingを受け取りますが、インポート時に自動的に適切な文字セットに変更されますので、どんな文字セットを設定してもかまいません。今回はASCIIエンコーディングを設定しています。

                              LoadFromFileカスタムオペレーションを実行してメッセージソースをインポートします。このカスタムオペレーションの一つ目のパラメータはインポートするファイルのフルパスを表す文字列です。

                              カスタムオペレーションを実行後、オブジェクトのプロパティは適切にセットされていますので、メール解析なども容易に行えます。

                              | technicals | 13:50 | comments(1682) | trackbacks(0) | - | - |
                              カスタムオペレーションを自作する
                              0

                                カスタムオペレーションを自作すると様々な処理を自動化できます。他の人が作成したカスタムオペレーションを自分のプログラムに組み込むことも簡単にできます。

                                自作のカスタムオペレーションはExwarp.Operations.CustomOperationBaseクラスから派生させます.

                                [C#]
                                public class MyAddOperation:Exwarp.Operations.CustomOperationBase
                                {
                                    public override void Operate(Exwarp.Operations.IOperatable opr)
                                    {
                                        object[] prms = this.GetParameters();
                                        int value1 = (int)prms[0];
                                        int value2 = (int)prms[1];

                                        this.SetResult(value1 + value2);
                                    }
                                }
                                [VB.Net]
                                Public Class MyAddOperation
                                    Inherits Exwarp.Operations.CustomOperationBase

                                    Public Overrides Sub Operate(ByVal opr As Exwarp.Operations.IOperatable)
                                        Dim prms() As Object = Me.GetParameters()
                                        Dim value1 As Integer = CType(prms(0),System.Int32)
                                        Dim value2 As Integer = CType(prms(1),System.Int32)

                                        Me.SetResult(value1 + value2)
                                    End Sub
                                End Class
                                解説

                                今回は二つの値を足し合わせるカスタムオペレーションの作成例を取り上げます。(実用性は全くありませんが、カスタムオペレーションに渡されたパラメータの取得とカスタムオペレーションが返す戻り値の設定がポイントです。)

                                今回のカスタムオペレーションは次のように使用されることを想定しています。objはカスタムオペレーションを実行できる任意のオブジェクトのインスタンスを表します。

                                [C#]
                                object ret = obj.RunCommand("MyAdd",10,20);
                                [VB.Net]
                                Dim ret As Object = obj.RunCommand("MyAdd",10,20)

                                自作カスタムオペレーションは通常Exwarp.Operations.CustomOperationBaseクラスを継承して作ります。

                                カスタムオペレーションのメインロジックはOperate()メソッドをオーバーライドして記述します。このメソッドはパラメータとしてExwarp.Operations.IOperatable型オブジェクトを受け取ります。このパラメータはカスタムオペレーションを実行したオブジェクトを表します。メソッド内部で適切な型にキャストする必要があります。(今回のサンプルでは使用しません)

                                カスタムオペレーションに渡されたパラメータを取得するためにGetParameters()メソッドを呼び出します。このメソッドはカスタムオペレーションに渡されたすべてのパラメータをObject型の配列で返します。メソッド内で適切な型にキャストする必要があります。今回は省略していますが,適切でない数のパラメータが設定されていたり、型が間違っていたりする場合の例外処理なども必要です。

                                カスタムオペレーションが返す戻り値を設定するためにSetResult()メソッドを呼び出します。このメソッドはObject型のパラメータを1つ受け取ります。このパラメータに渡された値がカスタムオペレーションの戻り値となります。

                                出来上がったカスタムオペレーションはオブジェクトに登録しなければ呼び出せません。以下のようにカスタムオペレーションを追加します。objはカスタムオペレーションを実行できる任意のオブジェクトのインスタンスを表します。

                                [C#]
                                obj.AddOperation("MyAdd",new MyAddOperation());
                                [VB.Net]
                                obj.AddOperation("MyAdd",New MyAddOperation())

                                カスタムオペレーションを追加するために、AddOperation()メソッドを使用します。このメソッドの一つ目のパラメータは追加されるオペレーションを識別するためのオペレーション名です。通常クラス名の"Operation"を省いた文字列を設定します。二つ目のパラメータに追加したいカスタムオペレーションのインスタンスを設定します。

                                | technicals | 12:50 | comments(1503) | 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) | - | - |
                                    メールをeml形式で保存する
                                    0

                                      メールメッセージを.eml形式で保存するには、Exwarp.Net.RFC.RFCMessageに定義されているSaveToFileカスタムオペレーションを実行します。

                                      [C#]
                                      msg.RunCommand("SaveToFile","c:¥¥mail.eml");
                                      [VB.Net]
                                      msg.RunCommand("SaveToFile","c:¥mail.eml")
                                      解説

                                      msgExwarp.Net.RFC.RFCMessage及びその派生クラスののインスタンスを表します。このインスタンスを生成方法や取得方法についてはこちらを参照してください。

                                      SaveToFileカスタムオペレーションはメッセージソースを表すバイト列をシリアル化するカスタムオペレーションです。一つ目のパラメータに保存先のフルパスを表す文字列を設定します。

                                      ファイルの拡張子を.emlにすることで多くのメーラーでもこのファイルをを開くことができます。

                                      | technicals | 10:36 | comments(2182) | trackbacks(0) | - | - |
                                      添付ファイルを保存する
                                      0

                                        添付ファイルを保存するにはSaveBinaryBodyカスタムオペレーションを使います。添付ファイルのファイル名を、Content-Typeヘッダーフィールドのnameパラメータから取得するため、GetHeaderFieldParameterBody()メソッドも使用します。(Content-Dispositionヘッダーフィールドのfilenameパラメータもを使うこともできます。)

                                        [C#]
                                        string filename = att.GetHeaderFieldParameterBody("Content-Type","name");
                                        if(filename != null)
                                        {
                                            att.RunCommand("SaveBinaryBody","c:¥¥" + filename);
                                        }
                                        [VB.Net]
                                        Dim filename As String = att.GetHeaderFieldParameterBody("Content-Type","name")
                                        If Not(filename Is Nothing) Then
                                            att.RunCommand("SaveBinaryBody","c:¥" & filename)
                                        End If
                                        解説

                                        attExwarp.Net.RFC.MIME.MIMEContentMessageのインスタンスを表します。このオブジェクトの生成及び取得方法についてはこちらを参照して下さい。

                                        MIMEContentMessageGetHeaderFieldParameterBody()メソッドを呼び出してヘッダーフィールドに追加されているパラメータの値を取得します。このメソッドの一つ目のパラメータは取得したいパラメータの含まれるヘッダーフィールド名を表す文字列です。二つ目のパラメータは取得したいパラメータ名を表す文字列です。該当するヘッダーフィールドパラメータが見つかった場合、その値が返されます。それ以外の場合はnull(VB.NetではNothing)が返されます。

                                        ファイル名が取得できたら、SaveBinaryBodyカスタムオペレーションを使用して添付ファイルを保存します。このカスタムオペレーションのパラメータはファイルの保存先のフルパスを表す文字列です。(今回の例ではCドライブのルートディレクトリに保存しています。)

                                        | technicals | 14:12 | comments(1907) | trackbacks(0) | - | - |
                                        メールに添付された添付メッセージを取得する
                                        0

                                          メールに添付された添付メッセージを取得するにはExwarp.Net.Mail.MailMessageクラスに定義されているGetAttachmentsカスタムオペレーションを実行します。

                                          [C#]
                                          Exwarp.Net.RFC.MIME.MIMEContentMessage att;
                                          Exwarp.Net.RFC.MIME.MIMEContentMessage[] atts;
                                          atts = (Exwarp.Net.RFC.MIME.MIMEContentMessage[])mail.RunCommand("GetAttachments");

                                          if(atts != null)
                                          {
                                              foreach(att in atts)
                                              {
                                                  //ANY PROCESS
                                              }
                                          }
                                          [VB.Net]
                                          Dim att As Exwarp.Net.RFC.MIME.MIMEContentMessage
                                          Dim atts() As Exwarp.Net.RFC.MIME.MIMEContentMessage

                                          Dim wrk As Object = mail.RunCommand("GetAttachments")
                                          If Not(wrk Is Nothing) Then
                                              atts = CType(wrk,Exwarp.Net.RFC.MIME.MIMEContentMessage())
                                              For Each att In atts
                                                  'ANY PROCESS
                                              Next
                                          End If
                                          [解説]

                                          mailExwarp.Net.Mail.MailMessageのインスタンスを表します。このインスタンスの生成方法及びメールメッセージの取得方法についてはこちらを参照してください。

                                          MailMessageに定義されているGetAttachmentsカスタムオペレーションを実行します。このカスタムオペレーションはメールに含まれる全ての添付メッセージのリストをExwarp.Net.RFC.MIME.MIMEContentMessage型の配列で返します。(カスタムオペレーションは戻り値を全てObject型で返しますので,MIMEContentMessage配列型にキャストする必要があります。C#では変換演算子,VB.NetではCType関数を使います。)

                                          もしメールに添付メッセージが追加されていない場合、GetAttachmentsカスタムオペレーションはnull(VB.NetではNothing)を返します。

                                          添付メッセージのリストが取得できた場合、取得されたリストをForEachループで列挙しながら、それぞれの添付ファイルに対してカスタムプロセスを実行することができます。

                                          | technicals | 11:42 | comments(1795) | trackbacks(0) | - | - |
                                          メールに添付ファイルを追加する
                                          0

                                            メールに添付ファイルを追加する方法を紹介します。

                                            メールの添付には2つのステップが必要です。まず(1)添付メッセージの作成、次に(2)添付メッセージの追加です。具体的なコードは次のようになります。

                                            [C#]
                                            Exwarp.Net.Mail.MailMessage mail =
                                                new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"));

                                            mail.RunCommand("AddTo","MyFriend","myfriend@friend.com");
                                            mail.Subject = "添付メールサンプル";
                                            mail.From = "me@me.com";
                                            mail.Body = "本文です";

                                            object o = mail.RunCommand("CreateAttachment","c:¥¥myimg.jpg");
                                            mail.RunCommand("AddAttachment",o);

                                            [VB.Net]
                                            Dim msg As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))

                                            mail.RunCommand("AddTo","MyFriend","myfriend@friend.com")
                                            mail.Subject = "添付メールサンプル"
                                            mail.From = "me@me.com"
                                            mail.Body = "本文です"

                                            Dim o As Object = mail.RunCommand("CreateAttachment","c:¥myimg.jpg")
                                            mail.RunCommand("AddAttachment",o)
                                            [解説]

                                            メールメッセージの新しいインスタンスを作成します。この部分の解説はこちらをご覧ください。

                                            メールメッセージに追加する添付メッセージを作成します。MailMessageクラスに定義されているCreateAttachmentカスタムオペレーションを実行します。このカスタムオペレーションは添付ファイルのパスを表す文字列をパラメータとして受け取ります。戻り値として添付ファイルをカプセル化したExwarp.Net.RFC.MIME.MIMEContentMessageオブジェクトが返されます。(カスタムオペレーションは常に戻り値をObject型で返します)

                                            次に生成された添付メッセージをメールメッセージに追加します。これはAddAttachmentカスタムオペレーションを呼び出すことで簡単に行なえます。AddAttachmentカスタムオペレーションは添付ファイルをカプセル化したExwarp.Net.RFC.MIME.MIMEContentMessageオブジェクトをパラメータとして受け取ります。(上記サンプルの場合o)戻り値は返しません。

                                            ボディを設定しないで添付メッセージを追加しようとすると例外が発生します。これは添付ファイルのみのメールメッセージは作成できないという仕様上の制限です。そのため本文は必ず設定してください。長さ0の文字列(System.String.Empty)でも構いません。

                                            上記の例外を発生させる部分でバグが確認されました。(アセンブリ:Exwarp.Net.Mail.dll,バージョン:1.0.291.0)エラーコードが間違って指定されていたため、リソースが見つからないというエラーメッセージが表示されます。次期バージョンにて修正済みです。


                                            これで添付ファイルが追加されました。今回のサンプルの結果mailオブジェクトのMessageSourceプロパティには下のようなバイト列が生成されます。(*****部分は削除してあります。)

                                            To: MyFriend<myfriend@friend.com>
                                            Subject: =?iso-2022-jp?B?GyRCRTpJVSVhITwlayU1JXMlVyVrGyhC?=
                                            From: me@me.com
                                            MIME-Version: 1.0
                                            Message-ID: <20060523185922_32ddb412@*****>
                                            Content-Type: multipart/mixed;
                                             boundary="__NEXTPART_20060523_77DBB3AE_A728AA9"

                                            This is a multipart message in MIME format.

                                            --__NEXTPART_20060523_77DBB3AE_A728AA9
                                            Content-Type: text/plain; charset=iso-2022-jp
                                            Content-Transfer-Encoding: 7bit

                                            ・$BK¥J8$G$9・(B
                                            --__NEXTPART_20060523_77DBB3AE_A728AA9
                                            Content-Type: image/jpeg; name="myimg.jpg"
                                            Content-Disposition: attachment; filename="myimg.jpg"
                                            Content-Transfer-Encoding: base64

                                            /9j/4AAQSkZJRgABAgAAZABkAAD//gASQWRvYmUgSW1hZ2VSZWFkef/sABFE
                                            *****
                                            jan8/wCCEISjPsUQ+SlNtRZ9LoQg5oGR4qPp/wAkqd0IQl7vcv/Z

                                            --__NEXTPART_20060523_77DBB3AE_A728AA9--
                                            | technicals | 18:32 | comments(1758) | trackbacks(0) | - | - |
                                            Exwarpを使用したメール送信
                                            0

                                              Exwarpを使ってメールを送信するプログラムを紹介します。

                                              SMTPプロトコルでのメール送信には、Exwarp.Net.Smtp.SmtpClientを使用します。

                                              HOST_NAME はホスト名を表す文字列です。


                                              [C#]
                                              Exwarp.Net.Mail.MailMessage mail
                                                  = new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"));

                                              mail.RunCommand("AddTo","MyFriend","myfriend@myfriend.com");
                                              mail.Subject = "明日の打ち合わせ";
                                              mail.From = "me@me.com";
                                              mail.Body = "明日の件です。....[以下、本文テキスト]";

                                              Exwarp.Net.Smtp.SmtpClient client
                                                  = new Exwarp.Net.Smtp.SmtpClient("HOST_NAME");

                                              client.Connect();
                                              client.SendReceive(mail);
                                              client.Close();

                                              [VB.Net]
                                              Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))

                                              mail.RunCommand("AddTo","MyFriend","myfriend@myfriend.com")
                                              mail.Subject = "明日の打ち合わせ"
                                              mail.From = "me@me.com"
                                              mail.Body = "明日の件です。....[以下、本文テキスト]"

                                              Dim client As New Exwarp.Net.Smtp.SmtpClient("HOST_NAME")

                                              client.Connect()
                                              client.SendReceive(mail)
                                              client.Close()

                                              [解説]

                                              exwarpでメールを送信するためには、Exwarp.Net.Smtp.SmtpClientを使用します。


                                              送信したいメールはExwarp.Net.Mail.MailMessageがカプセル化します。


                                              まず、MailMessageインスタンスを初期化します。コンストラクタは、メールメッセージに適用される文字セットを指定します。日本語で広く使われるのはiso-2022-jpという文字セットです。System.Text.EncodingオブジェクトのGetEncoding()メソッドを使用して文字セット設定します。

                                              MailMessageに登録されているAddToカスタムオペレーションを実行します。これはToヘッダーフィールドに指定された表示名とアドレスで構成される送信先情報を追加するカスタムオペレーションです。表示名が必要ない場合、nullを指定できます。

                                              Subjectプロパティに件名を設定します。任意の文字列が使用できますが改行は含められません。Subjectヘッダーの内容は自動的にMIMEエンコードされます。

                                              Fromプロパティに送信者を指定します。プロパティに直接文字列を指定する方法とAddMailBoxカスタムオペレーションを使用する方法があります。カスタムオペレーションを使用した場合

                                              [C#]
                                              mail.RunCommand("AddMailBox","From","送信者の表示名","me@me.com");
                                              [VB.Net]
                                              mail.RunCommand("AddMailBox","From","送信者の表示名","me@me.com")
                                              のようになります。

                                              次にメールメッセージボディ(本文)を設定します。MailMessageBodyプロパティに文字列を代入するだけで本文を更新できます。メッセージボディの内容はコンストラクタで設定した文字セットで自動的にエンコードされます。

                                              メールの送信にはExwarp.Net.Smtp.SmtpClientを使います。コンストラクタにはSMTPサーバーのホスト名を表す文字列を設定します。

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

                                              SendReceive()メソッドでメールを実際にホストに送信します。パラメータにはメールメッセージをカプセル化するMailMessageのインスタンス(この場合mail)をセットします。

                                              SendReceive()メソッドは実際には、SendMessageカスタムオペレーションのラッパーですからカスタムオペレーションを直接呼び出してメールを送信することもできます。その場合

                                              [C#]
                                              client.RunCommand("SendMessage",mail);
                                              [VB.Net]
                                              client.RunCommand("SendMessage",mail)
                                              のように記述します。

                                              最後にClose()メソッドで接続を切断します。


                                              | technicals | 15:08 | comments(1712) | 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) | - | - |