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

12
--
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対策もお任せください。
【予告】メジャーバージョンアップ
0
    ExwarpMailKitのメジャーバージョンアップを近く行います。
    今回のバージョンアップにより、SSL通信をサポートいたします。
    これまでgmailなど、SSL必須のメールサーバーへの接続は行えませんでしたが、本バージョンアップに伴いこの問題も解消されます。
    同時にライブラリの価格改定も行います。
    今後も、ExwarpMailKitをよろしくお願いいたします。
    | technicals | 12:41 | - | - | - | - |
    ExwarpMailKitをご使用中のお客様のご感想
    0
      最近ご購入いただいたお客様の声を掲載します。

      exWarpがとても便利で助かっております。


      現状、弊社ではASP(.NETではない)で●●●●●を構築しています。
      メール処理は▲▲▲▲を使っており、最近、海外からのメールが増え
      文字化けが多発したため、[exwarp]を選択しました。
      すばらしいソフトだと思います。


      御社製品「Exwarp MailKit」につきまして。
      その節はわかりやすいソースのご提供ありがとうございました。
      おかげさまで、検証作業を終えることができました。
      多種キャリアのケータイ(スマートフォン含む)に対して、
      インライン画像メールを容易に送信できることが確認できましたので、
      ぜひ御社製品を導入させていただきたいと思っております。

      | information | 15:13 | - | - | - | - |
      【質問】例えば AUの携帯端末でhtmlにアクセスし formのtextボックスに絵文字入りの文章を入力 その文章をdocomoやsoftbank携帯宛にメールをしたい場合、絵文字の変換は可能ですか?
      0
        この機能を実装するためには、HTTPでの絵文字入力(デコード処理)と、絵文字メール送信(エンコード処理)が必要となります。

        残念ながら、現状Exwarp MailKitが対応しているのは絵文字出力(エンコード処理)のみとなりますので、フォームなどから入力された絵文字を識別する機能につきましては、実装することができません。
        PHPでは、mb_substitute_character("long");を利用することで比較的簡単に絵文字コードの抽出が行えます。

        3キャリア向けの絵文字メールを配信する機能につきましては、問題なく実装が可能です。、
        | technicals | 12:29 | - | - | - | - |
        絵文字付のメールを作成する
        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 | - | - | - | - |
          【質問】ExwarpMailKitの携帯端末対応について
          0
            ExwarpMailKitの携帯端末対応について:

            ■携帯端末宛のHTMLメールについて
            ExwarpMailKitでは、テキスト形式とHTML形式のメール本文を混在させることが可能ですので、携帯端末にHTML形式の本文でメールを作成することも可能です。
            ただし、HTML形式の本文に関しましては、Content-Transfer-Encodingの値が強制的にQuoted-Printableになる仕様となっておりますので、Base64や7bitでのエンコードを要求するメーラーでは正常に読むことができない可能性もあります。

            ■携帯端末宛の絵文字メールについて
            ExwarpMailkitではメール本文にバイナリコードを挿入する機能はございません。そのため、絵文字などバイナリで入力する必要のある一部キャラクタにつきましては現在のところ未対応となっております。今後の仕様変更で対応可能としてゆく予定ですがリリース次期などは未定です。
            | technicals | 21:32 | - | - | - | - |
            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 | - | - | - | - |
              【質問】メール受信において稼動状況をログファイルに出力したいのですが、本ライブラリでは可能ですか?
              0
                現状では、直接ログを出力する機能は本ライブラリに実装されておりませんが、受信ロジックは自由に拡張したり書き換えたりすることができますので、ログを出力するロジックを追加した受信処理を実装することは可能です。
                カスタム受信のサンプルはこちらに参考にできるコード(C#)を公開しております。
                | technicals | 18:32 | - | - | - | - |
                【質問】1件づつメールをサーバより削除する方法はどのようにするのでしょうか?
                0
                  メールをどのタイミングで削除するのかにより、手順が異なりますが以下の2通りの場面について解説いたします。

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

                  ■メールの受信とは別にサーバーからメールを削除する
                  この場合、こちらにカスタムオペレーションのソースコードを公開しておりますので、ご参考になってください。
                  本カスタムオペレーションを実行すると、メールサーバーからすべてのメールを1件ずつ削除することができます。削除するメールを判別しながら削除するなどの処理を実行したい場合は、ソースコードに必要な条件式を入力していただくことで対応可能です。
                  | technicals | 17:03 | - | - | - | - |
                  【質問】1行の文字数を設定してMIMEエンコードしたメール本文を、Exwarp.Net.Mail.MailMessageオブジェクトを用いて送信できますか?
                  0
                    通常、メール本文にMIMEエンコードを行うことはありません。
                    メール本文は、Content-Typeヘッダーフィールドにcharsetが指定されている場合、その文字セットでエンコードされたバイト列で記述されます。
                    例外として、charsetで指定されている文字セットが8ビットエンコーディングの場合には、base64やquoted-printableという方法で7ビット化したバイト列を記述します。
                    ExwarpMailKitには現在のところ、本文の1行の文字列を調整する機能は実装しておりません。ただし、前述のbase64については、76文字を超えないように自動的に調整されます。
                    | technicals | 14:05 | - | - | - | - |
                    【質問】特定の「件名」のメッセージだけを取得するには?
                    0
                      特定の件名が含まれるメッセージを受信するには、カスタム受信処理を行う必要があります。
                      下記の要領でカスタム受信を行います。

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

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

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

                      カスタム受信のサンプルはこちらを参照してください。
                      | technicals | 12:34 | - | - | - | - |
                      【質問】メールサーバーから受信メールを取得した際、ウイルスメールなどの対策は?
                      0
                        ExwarpMailKitを使用してメールを受信する際のウイルスメール対策などは特に用意されていません。

                        メールメッセージは、通常単なる7ビットのテキストとして受信されますので、受信処理だけでウイルスに感染することはありませんが、バイナリファイルに展開するなどの処理が実行される場合には、問題が発生する可能性があります。

                        それで、ウイルスメールの可能性があると思われるメールについては、以下の処理を避けるなどしてウイルスメール対策を講じることが出来ます。

                        ■mail.RunCommand("SaveBinariBody",PATH)の使用
                        ■mail.BinaryBodyプロパティの参照

                        上記、2点に共通して実行される処理は、BinaryBodyプロパティが参照されることです。
                        BinaryBodyプロパティを参照すると7ビットのテキストから8ビットのバイナリデータに変換されるため、メモリ上にプログラムの実体が展開されます。この場合、ウイルスプログラムが実行される可能性があります。

                        BinaryBodyプロパティが参照されるまでは、7ビットのテキストのままですので問題はありません。
                        | technicals | 12:27 | - | - | - | - |
                        ExwarpMailKit1.0.359.*リリースのお知らせ
                        0
                          Exwarp MailKit 1.0.359.*をリリースいたしました。本バージョンには以下の変更点があります。

                          ■非同期スレッドで発生した例外がメインスレッドで補足できないバグを修正。

                          ■Return-PathにFromで設定した値が強制的に適用される仕様を変更。Return-PathとFromヘッダーフィールドに異なるメールアドレスを指定できます。

                          ■HideBccプロパティの追加。SMTPホストへのBCCヘッダーフィールドの送信を制限します。

                          製品版を購入いただいておりますユーザー様は無料でバージョンアップできます。
                          | information | 16:27 | - | - | - | - |
                          【質問】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 | - | - | - | - |
                                CompoundSmtpClientトライアウトバージョン公開のお知らせ
                                0
                                  複数のSMTPクライアントを使用して大量メールの並列送信が行なえるExwarp.Net.Smtp.CompoundSmtpClientが含まれるExwarp.Net.Smtp.Extension.dllを公開しました。
                                  CompoundSmtpClientを使用するにはパスキーの取得が必要です。(スパムメール送信防止のためご協力お願いいたします)
                                  パスキーの取得はこちらで行なえます。

                                  メールを大量に送信するサンプルコードは次のようになります。
                                  [C#]
                                  Exwarp.Net.Smtp.CompoundSmtpClient client = new Exwarp.Net.Smtp.CompoundSmtpClient("HOST_NAME",10);
                                  client.SetProperty("tryout_user","パスキーのID");
                                  client.SetProperty("tryout_pass","パスキーのパスワード");
                                  client.Connect();
                                  client.SendReceive(MAILS);
                                  client.Close();

                                  解説
                                  HOST_NAMEはSMTPホスト名を表す文字列。
                                  MAILSは送信メールを表すSystem.Collections.IList型のコレクションです。

                                  CompoundSmtpClientはコンストラクタに、ホスト名とプロセス数を受け取ります。この例では同じホストに10プロセスでメールを送信することになります。AddSmtpClient()メソッドを使用して、他のSMTPホストに接続することもできます。

                                  メールの送信は通常どおりですが、トライアウトバージョンではパスキーを設定しなければ接続に失敗します。SetProperty()メソッドを使用してパスキーを設定します。

                                  このライブラリをスパムメール送信に使用することは禁止します。大量のメールマガジンの送信などに使用して下さい。

                                  Exwarp.Net.Smtp.Extension.dllのダウンロード
                                  | information | 18:19 | - | - | - | - |
                                  SMTP:メールの送信状況を確認する
                                  0
                                    ExwarpMailKit1.0.339.*ライブラリを使用すると、複数メールの送信中にメールが送信されるたびにイベントを検知することができます。大量のメールが送信されている場合に、メール送信の進行状況を確認することができます。
                                    [C#]
                                    private void OnMailMessageSent(object sender,Exwarp.Net.Mail.MailEventArgs e)
                                    {
                                      Exwarp.Net.Mail.MailMessage mail = e.Mail;
                                      //カスタム処理を記述します。
                                    }

                                    //以下はメールの送信ロジック
                                    //通常、任意の関数内に記述します。
                                    Exwarp.Net.Smtp.SmtpClient client = new Exwarp.Net.Smtp.SmtpClinet("SMTP_HOST");
                                    client.MailMessageSent += new Exwarp.Net.Mail.MailEventHandler(this.OnMailMessageSent);
                                    client.Connect();
                                    clinet.SendReceive(MAILS);
                                    client.Close();

                                    解説
                                    SMTP_HOSTはSMTPホストを表す文字列。
                                    MAILSは送信メールのコレクションを表すSystem.Collections.IList型オブジェクトです。

                                    通常のメール送信処理までに、MailMessageSentイベントにイベントハンドラを追加しておきます。このようにすることでメールが送信されるたびに追加したイベントハンドラに制御が移ります。
                                    今回の場合、OnMailMessageSentというイベントハンドラを追加しています。この関数は、object型のパラメータとExwarp.Net.Mail.MailEventArgs型のパラメータを受け取ります。
                                    二つ目のパラメータのMailプロパティを参照することで、送信されたメールを取得することができます。

                                    注意点:
                                    このイベントはメール送信中にエラーが発生しても、正常にSMTPホストがメールを受け付けても必ず発生します。メールの送信が成功したか失敗したかを確認する場合は、e.Mail.GetProperty("SendResult")の値をチェックします。
                                    成功している場合は,Exwarp.Net.Smtp.SendResult.Complete、失敗した場合はExwarp.Net.Smtp.SendResult.Failedがセットされます。

                                    この機能はExwarpMailKit1.0.339.*以上のライブラリで使用できます。
                                    | technicals | 14:48 | - | - | - | - |
                                    メールの送信結果を取得する
                                    0
                                      Exwarp MailKit 1.0.339.*を使うとメール送信が成功したか、失敗したかを確認することができます。
                                      [C#]
                                      //Exwarp.Net.Smtp.SmtpClient.SendReceive(MAILS)を使ったメール送信処理

                                      foreach(Exwarp.Net.Mail.MailMessage mail in MAILS)
                                      {
                                        if(Exwarp.Net.Smtp.SendResult.Complete.Equals(mail.GetProperty("SendResult")))
                                        {
                                          //成功時の処理
                                        }
                                        else
                                        {
                                          //失敗時の処理
                                        }
                                      }
                                      [解説]

                                      送信処理中にエラーが発生する場合、Exwarp.Net.Mail.MailMessageSendResultカスタムプロパティにExwarp.Net.Smtp.SendResult.Failedがセットされ、送信に成功した場合、Exwarp.Net.Smtp.SendResult.Completeがセットされます。
                                      この値をチェックすることで正常にメールが送信されたかどうかを判断できます。

                                      この機能は1.0.339.*以上のライブラリで利用可能です。
                                      また、この機能は実際にメールが受信者まで送信されたかどうかを識別するものではありません。SMTPホストが送信メールを正常に受け付けたかどうかを判断するだけですので、QUITコマンドが送信される前に接続が切断された場合などは、SendResultカスタムプロパティの値に関係なく、メールの送信が行われない場合もありますのでご注意ください。


                                      | technicals | 12:29 | - | - | - | - |
                                      ExwarpMailKitバージョンアップのお知らせ(1.0.339.*)
                                      0
                                        Exwarp MailKit 1.0.339.*をリリースしました。
                                        SMTPライブラリに機能追加がなされています。主な変更は以下のとおりです。

                                        ○送信時にエラーが発生しても送信処理を続けられるようになりました。
                                        ○複数のメールを送信中にメールを1件送信するたびにイベントが発生するようになりました。送信処理の進行状況を確認できます。
                                        ○送信に成功したか失敗したかを判別できるようになりました。

                                        その他の追加機能(スパムピッカー、XMLコマンド)のベータ版、アルファ版も試用できます。

                                        製品版をご購入いただいたユーザー様は無料でバージョンアップできます。
                                        | information | 15:36 | - | - | - | - |
                                        メール
                                        0
                                          このブログでは、インターネットメール(Eメール)の仕組みを簡単に解説します。
                                          今回は、メールメッセージの構成要素についての説明です。

                                          メールの構成要素は、大きく分けてヘッダーボディです。
                                          ヘッダーは、メールのメタデータで、メーラーで文字となって表示されることは比較的少ない部分ですが、特に日本語のメールの場合この部分が大変重要な意味を持ち、実装にも特別手間がかかります。

                                          メールヘッダーの各項目は、ヘッダーフィールドと呼ばれます。ヘッダーフィールドは、コロン(:)で区切って、ヘッダーフィールド名とヘッダーフィールドボディに分けられます。
                                          幾つかのメールヘッダーは、複数の情報を保持します。このようなヘッダーフィールドを構造化ヘッダーフィールド(Structured Header Field)といいます。
                                          例えば、Content-Typeヘッダーフィールドには、MIMEタイプと、メールに適用されている文字セットを指定することがほとんどです。
                                          逆に、件名(Subject)などのヘッダーフィールドは構造化されていないヘッダーフィールドです。主に人間が見るための情報は構造化されていないヘッダーフィールドが使用されます。

                                          ボディ部には、メールの本文が記録されます。日本語では、多くの場合iso-2022-jpという文字セットでエンコードされたバイト列で記録されますが、時にShift-JISなどのように8ビットの文字セットが使われる場合もありますが、この場合はBase64という方法でメール本文が7ビットになるように変換されることがほとんどです。
                                          こうしたメールのボディに関する情報もすべてメールヘッダーに含まれていなければ、メーラーは正しくメールを解釈できないのです。

                                          メールヘッダーとメールボディはNULL行(CR/LFのみの行)で区切られます。
                                          実装時に注意すべき点として、ヘッダーが存在しないメールが時々あったり、逆にヘッダーのみのメールも存在し得るという点です。単純にNULL行を検索するだけでは、効した状況にうまく対処できないため実装時には特に注意する必要があるでしょう。


                                          7ビット文字セットと8ビット文字セット


                                          もともと、Eメールは英語だけで書かれていました。英数字と記号は128個のコードで表現することができたたため、7ビット(2の7乗)で十分表現できたのです。この文字セットを特別に(US-ASCII)と呼びます。
                                          メール環境では、オクテットOctet)という8ビットのデータの集まりを1つの単位として扱いますが、US-ASCIIのような7ビット文字では8ビット目は使用しません。
                                          ところが、日本語の文字セットは、16ビット(8ビット×2)で表現されることが多く、オクテット(8ビット)に分割したときに8ビット目も使ってしまいます。
                                          このように当初のメール環境との互換性のために、実際は8ビットのままでも問題のないことがほとんどなのですが、今でもメールメッセージは7ビットで表現するのが一般的になっています。8ビットのデータを7ビットに変換するためには、たいていBase64という手法が用いられます。
                                          | others | 13:27 | - | - | - | - |
                                          メールにカスタムヘッダーフィールドを追加する
                                          0

                                            メールに独自のヘッダーフィールドを追加したいことがあります。例えばメーラー情報などはよく使われるカスタムヘッダーフィールドの一例です。X-で始まるカスタムヘッダーの追加はExwarp MailKitで簡単に行えます。

                                            [C#]
                                            Exwarp.Net.Mail.MailMessage mail =
                                                new Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"));
                                            mail.SetHeaderFieldBody("X-Mailer","MyMailer",true);
                                            [VB.Net]
                                            Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))
                                            mail.SetHeaderFieldBody("X-Mailer","MyMailer",True)
                                            解説

                                            カスタムヘッダーフィールドの設定は、SetHeaderFieldBody()メソッドを使用します。
                                            一つ目のパラメータはカスタムヘッダーフィールド名,
                                            二つ目のパラメータはカスタムヘッダーフィールドの値を表す文字列です。
                                            三つ目のパラメータは、このヘッダーフィールドが存在しない場合に新しくヘッダーフィールドを作成するかどうかを表します。今回は新規に追加するため、trueを設定します。この値にfalseが設定されると、指定された名前のヘッダーフィールドが見つからない場合に例外が発生します。

                                            | technicals | 14:34 | comments(1897) | trackbacks(0) | - | - |
                                            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

                                                SmtpClientLocalHostプロパティを使用すると、SMTPHELO/EHLOコマンド送信時に、メール送信ホスト名を通知することができます。

                                                [C#]
                                                client.LocalHost="localhost";

                                                client.Connect();
                                                client.SendReceive(MAIL);
                                                client.close();
                                                [VB.Net]
                                                client.LocalHost = "localhost"

                                                client.Connect()
                                                client.SendReceive(MAIL)
                                                client.Close()
                                                解説

                                                clientExwarp.Net.Smtp.SmtpClientのインスタンスを表します。
                                                MAILは初期化済みのExwarp.Net.Mail.MailMessageクラスのインスタンスを表します。

                                                送信前に、SmtpClientLocalHostプロパティにメール送信ホスト名を設定します。
                                                このプロパティに値が設定されると、SmtpClientは、HELO/EHLOコマンド送信時に、メール送信ホスト名を通知します。

                                                このプロパティの値が未設定の場合、SmtpClientは、HELO/EHLOコマンド送信時にメール送信ホスト名を通知しません。たいていの場合、メール送信ホスト名は省略できますので、このプロパティを設定する必要はありません。

                                                この機能は、 1.0.311.*以上のバージョンで使用できます。

                                                | technicals | 12:00 | comments(1689) | trackbacks(0) | - | - |
                                                SmtpClientを使って一度の接続で複数のメールを連続送信する
                                                0

                                                  Exwarp.Net.Smtp.SmtpClientを使用すると、複数のメールメッセージを一度の接続で送信することができます。1メッセージごとに接続する場合に比べてパフォーマンスが格段に向上します。

                                                  [C#]
                                                  System.Collections.ArrayList mails = new System.Collections.ArrayList();
                                                  mails.Add(MAIL1);
                                                  mails.Add(MAIL2);

                                                  client.Connect();
                                                  client.SendReceive(mails);
                                                  client.Close();
                                                  [VB.Net]
                                                  Dim mails As New System.Collections.ArrayList()
                                                  mails.Add(MAIL1)
                                                  mails.Add(MAIL2)

                                                  client.Connect()
                                                  client.SendReceive(mails)
                                                  client.Close()
                                                  解説

                                                  clientは、Exwarp.Net.Smtp.SmtpClientのインスタンスを表します。
                                                  MAIL1,MAIL2Exwarp.Net.Mail.MailMessageの初期化済みインスタンスを表します。

                                                  一度の接続で送信したいメールメッセージをコレクションに追加します。System.Collections.ArrayListだけでなく、System.Collections.IEnumerableインターフェースを実装したクラスのインスタンスなら何でも構いません。

                                                  メールを追加したコレクションをSmtpClientSendReceive()メソッドにパラメータとして渡すと、SmtpClientは一度の接続で、コレクションに含まれるすべてのメッセージを送信します。

                                                  この機能は1.0.311.*以上のバージョンで利用できます。Tryoutバージョンでは、一度に連続送信できるメッセージの数は3件に制限されます。コレクションに4件以上追加しても最初の3件しか送信されませんのでご注意ください。

                                                  | technicals | 11:21 | comments(2096) | 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) | - | - |
                                                    SMTP-AUTHを使用してSMTPホストに接続する
                                                    0

                                                      ESMTPでは、SMTPサーバーへの認証手続きが可能になっています。SMTP認証を使用したログイン処理を行うためには、Exwarp.Net.Smtp.SmtpClient.UseESMTPプロパティを使用します。

                                                      HOST_NAMEはSMTPホスト名、
                                                      USERはユーザー名、
                                                      PASSはパスワードを表す文字列です。
                                                      MAILは送信するメールメッセージを表すExwarp.Net.Mail.MailMessageのインスタンスです。

                                                      [C#]
                                                      Exwarp.Net.Smtp.SmtpClient client = new Exwarp.Net.Smtp.SmtpClient("HOST_NAME");
                                                      client.User = "USER";
                                                      clinet.Pass = "PASS";
                                                      client.UseESMTP = true;
                                                      client.AuthType = Exwarp.Net.Smtp.SmtpAuthType.CramMD5;

                                                      client.Connect();
                                                      client.SendReceive(MAIL);
                                                      clinet.Close();
                                                      [VB.Net]
                                                      Dim client As New Exwarp.Net.Smtp.SmtpClient("HOST_NAME");
                                                      client.User = "USER"
                                                      client.Pass = "PASS"
                                                      client.UseESMTP = True
                                                      client.AuthType = Exwarp.Net.Smtp.SmtpAuthType.CramMD5

                                                      client.Connect()
                                                      client.SendReceive(MAIL)
                                                      client.Close()
                                                      解説

                                                      Exwarp.Net.Smtp.SmtpClientのインスタンスを生成します。

                                                      SMTP-AUTHに使用するユーザー名とパスワードを設定します。

                                                      SmtpClientUseESMTPプロパティをtrueに設定すると、SMTPクライアントはESMTPモードで動作します。SMTP-AUTHの認証方法を切り替えたい場合、SmtpClientAuthTypeプロパティに使用したい認証方法を表すExwarp.Net.Smtp.SmtpAuthTypeのいずれかの値を設定します。

                                                      ホストに接続し、SendReceive()メソッドを使用して、メールメッセージを送信します。

                                                      この機能は、1.0.308.*以上のバージョンで使用することができます。

                                                      | technicals | 13:17 | comments(1925) | trackbacks(0) | - | - |
                                                      メールにダミーの宛先を設定する
                                                      0

                                                        同時に複数の宛先にメールを送信する際、Toの値を全て同じにしたい場合があります。
                                                        例えば、AさんとBさんにメールを送りますが、AさんとBさんが受け取ったメールのToメールヘッダーには"<customers@myhost.com>"などとしたい場合です。

                                                        このようにダミーの宛先を設定する場合、SetProperty("_To",***)を使用します。

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

                                                        string[] toList = new string[]{"a@a.com","b@b.com",};
                                                        mail.SetProperty("_To",toList);
                                                        解説

                                                        Toヘッダーにダミーの宛先を設定します。

                                                        実際の送信先は、文字列型の配列に格納し、MailMessageSetProperty()メソッドを使用して_Toカスタムプロパティに設定します。_Toカスタムプロパティがメールメッセージに設定されている場合、SMTPクライアントはこの値をメールの送信先と認識します。

                                                        同じ原理で_Cc_Bccカスタムプロパティも使用できます。

                                                        この機能の実行には、Exwarp MailKit バージョン1.0.307.*以上が必要です。

                                                        | technicals | 17:14 | comments(1970) | trackbacks(0) | - | - |
                                                        Exwarp MailKit 1.0 Beta1 rc2(バージョン1.0.307.1)公開のお知らせ
                                                        0

                                                          SMTP-AUTHRFC2231などに対応したExwarp MailKit 1.0 Beta1 rc2を公開しました。

                                                          以前のバージョンとの大きな違いは次のとおりです。

                                                          • SMTP-AUTHに対応(PLAIN、LOGIN、CRAM-MD5に対応)
                                                          • HMACMD5Transformクラスの追加
                                                          • ByteBufferクラスのストリーム対応
                                                          • RFC2231形式のヘッダーフィールドパラメータに対応(RFC2231形式での書き出しには非対応)
                                                          • メール本文でBare LF/Bare CR(LF及びCR単体での使用)をCR/LFに自動変換機能の追加
                                                          • text/htmlメディアタイプのcharsetパラメータ自動付加を抑止
                                                          • Exwarp.Net.Mail.MailContext.MyMailAddressプロパティをExwarp.Net.Mail.MailContext.SenderAddressに変更(互換性維持のため、Obsoleteとなります。)
                                                          • Exwarp.Net.Mail.MailContext.GetMyAddress()メソッドをExwarp.Net.Mail.MailContext.GetSenderAddress()に変更(互換性維持のため、Obsoleteとなります。)
                                                          • その他の微細な仕様変更を追加

                                                          本バージョンの公開は短期間で終了いたします。その後製品版の公開となり、無料バージョンは機能制限のついたトライアル版へ移行いたします。

                                                          | information | 17:57 | comments(1938) | trackbacks(0) | - | - |
                                                          メールのMessage-Idをカスタマイズする
                                                          0

                                                            メールのメッセージID(Message-Id)は自由なカスタマイズ可能です。
                                                            デフォルトでは、日時+ランダムな16進数にメールアドレス(コンピューター名)を連結した文字列となりますが、Exwarp.Net.Mail.MailContextMessageIdGeneratorプロパティに任意のExwarp.Net.RFC.MIME.MIMEContext.IStringGeneratorをセットすることで任意のメッセージIDを生成できます。

                                                            [C#]
                                                            public class CustomMsgIdGenerator:
                                                              Exwarp.Net.RFC.MIME.MIMEContext.IStringGenerator
                                                            {
                                                              public string Create(object seed)
                                                              {
                                                                return "<1234567890@myhost.com>";
                                                              }
                                                            }
                                                            解説

                                                            Exwarp.Net.RFC.MIME.MIMEContext.IStringGeneratorインターフェースを実装した新しいクラスを定義します。IStringGeneratorインターフェースには、Create()メソッドが定義されています。このメソッドに任意の文字列を返すよう記述することで、メッセージIDをカスタマイズできます。(パラメータseedは使用しません。)

                                                            上記のように定数を記述すると、常に同じ値のメッセージIDが生成されるため、望ましくありません。実際は常に一意な値が生成されるように実装してください。

                                                            このクラスをExwarp.Net.Mail.MailContextMessageIdGeneratorプロパティにセットします。

                                                            [C#]
                                                            Exwarp.Net.Mail.MailContext.GetContext().MessageIdGenerator = new CustomMsgIdGenerator();
                                                            | technicals | 15:01 | comments(2335) | 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) | - | - |
                                                              1行の文字数を設定してMIMEエンコードを実行する
                                                              0

                                                                この記事を読む前にこちらを参照してください。

                                                                MIMEエンコードの際に1行の文字数を設定したいこともよくあります。例えばメールメッセージは1行が78文字を超えないことが推奨されています。Exwarpはこうした処理もとても簡単に実現します。

                                                                [C#]
                                                                System.Text.Encoding enc = System.Text.Encoding.GetEncoding("iso-2022-jp");
                                                                Exwarp.Net.RFC.MIME.MIMETransform trans = new Exwarp.Net.RFC.MIME.MIMETransform(enc);
                                                                byte[] encoded = trans.Encode(enc.GetBytes("このMOJIをMIMEEncodeします。"),50);
                                                                [VB.Net]
                                                                Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
                                                                Dim trans As New Exwarp.Net.RFC.MIME.MIMETransform(enc)
                                                                Dim encoded() As Byte = trans.Encode(enc.GetBytes("このMOJIをMIMEEncodeします。"),50)
                                                                解説

                                                                MIMETransformについての解説はこちらを参照してください。

                                                                MIMETransformEncode()メソッドの2番目のパラメータに1行の文字数を設定します。今回は、50に設定しています。

                                                                上のコードを実行するとencodedには下のようなバイト列が代入されます。設定された文字数を超えないように自動的にフォールディング処理(RFC準拠の改行処理)されます。

                                                                =?iso-2022-jp?B?GyRCJDMkThsoQg==?= MOJI
                                                                 =?iso-2022-jp?B?GyRCJHIbKEI=?= MIMEEncode
                                                                 =?iso-2022-jp?B?GyRCJDckXiQ5ISMbKEI=?=
                                                                | technicals | 16:14 | comments(1903) | trackbacks(0) | - | - |
                                                                MIMEエンコードを実行する
                                                                0

                                                                  RFC/822では、非ASCII文字をメールに含めることができませんでしたが,MIMEが規定されることにより、非ASCII文字をASCII文字に変換してメールに含めることができるようになりました。MIMEエンコードは煩雑な処理ですが,Exwarpを使用するととても簡単に実装できます。

                                                                  [C#]
                                                                  System.Text.Encoding enc = System.Text.Encoding.GetEncoding("iso-2022-jp");
                                                                  Exwarp.Net.RFC.MIME.MIMETransform trans =
                                                                      new Exwarp.Net.RFC.MIME.MIMETransform(enc);
                                                                  byte[] encoded = trans.Encode(enc.GetBytes("この文字列をMIMEエンコードします。"));
                                                                  [VB.Net]
                                                                  Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-2022-jp")
                                                                  Dim trans As New Exwarp.Net.RFC.MIME.MIMETransform(enc)
                                                                  Dim encoded() As Byte = trans.Encode(enc.GetBytes("この文字列をエンコードします。"))
                                                                  解説

                                                                  MIMEエンコードを実行するために、Exwarp.Net.RFC.MIME.MIMETransformのインスタンスを作成します。コンストラクタはMIMEエンコードに適用される文字セットを表すSystem.Text.Encodingを受け取ります。通常iso-2022-jpが使用されます。

                                                                  Encode()メソッドを使用して、MIMEエンコードを実行します。Encode()メソッドはエンコードされる前の文字列のバイト列を受け取ります。System.Text.EncodingオブジェクトのGetBytes()メソッドを使用して、このバイト列を生成します。Encode()メソッドはMIMEエンコードされたバイト列を返します。

                                                                  このコードを実行するとencodedには次のようなバイト列が代入されます。

                                                                  =?iso-2022-jp?B?GyRCJDMkTko4O3pOcyRyGyhC?= MIME =?iso-2022-jp?B?GyRCJSglcyUzITwlSSQ3JF4kOSEjGyhC?=


                                                                  | technicals | 11:34 | comments(1731) | 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) | - | - |
                                                                          メールにテキストとHTMLの本文を含める
                                                                          0

                                                                            メールに複数の形式の本文を含めたいことがあります。テキスト形式とhtml形式の混在したメールなどは一般的です。

                                                                            Exwarpを使うと様々な形式の本文を含めることができます。RFCに記されているようにapplication/postscript型の本文なども含められます。今回はテキストとhtml形式の本文を含める方法を紹介します。

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

                                                                            mail.Body = "これが本文です。";
                                                                            mail.DefaultTextType = Exwarp.Net.Mail.TextType.Html;
                                                                            mail.Body = "<html><body>これが本文です。</body></html>";
                                                                            [VB.Net]
                                                                            Dim mail As New Exwarp.Net.Mail.MailMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))

                                                                            mail.Body = "これが本文です。"
                                                                            mail.DefaultTextType = Exwarp.Net.Mail.TextType.Html
                                                                            mail.Body = "<html><body>これが本文です。</body></html>"
                                                                            解説

                                                                            通常MailMessageBodyプロパティに文字列を指定すると、text/plainメディアタイプ型のMIMEContentMessageが生成されます。これはMailMessageDefaultTextTypeプロパティの初期値がExwarp.Net.Mail.TextType.PlainTextに設定されているためです。

                                                                            まず、テキスト形式の本文を設定します。

                                                                            テキストの本文を設定したら、MailMessageDefaultTextTypeプロパティをExwarp.Net.Mail.TextType.Htmlに切り替えます。これで、これ以後はBodyプロパティを通してtext/htmlメディアタイプ型のMIMEContentMessageを操作するようになります。

                                                                            html形式の本文を設定します。

                                                                            これでテキスト形式とhtml形式の本文が含まれるメールメッセージが生成できました。MailMessageMessageSourceプロパティを参照すると次のようなバイト列が確認できます。*****部分は省いています。

                                                                            MIME-Version: 1.0
                                                                            Message-ID: <20060625160155_1129b361@******>
                                                                            Content-Type: multipart/alternative;
                                                                             boundary="__NEXTPART_20060625_586CE275_59B1FBCE"

                                                                            This is a multipart message in MIME format.

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

                                                                            ・$B$3$l$,K¥J8$G$9!#・(B
                                                                            --__NEXTPART_20060625_586CE275_59B1FBCE
                                                                            Content-Type: text/html; charset=iso-2022-jp
                                                                            Content-Transfer-Encoding: quoted-printable

                                                                            =1B$B$3$l$,K¥J8$G$9!#=1B(B=

                                                                            --__NEXTPART_20060625_586CE275_59B1FBCE--

                                                                            1.0.291.0では、html形式メッセージのContent-Transfer-Encodingヘッダーフィールドが7bitbase64となります。1.0.291.0より後のバージョンでは、自動的にquoted-printableが適用されます。

                                                                            | technicals | 15:28 | comments(1659) | 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) | - | - |
                                                                              実験: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) | - | - |
                                                                                RFC,MIME,メールメッセージのヘッダーを取得する
                                                                                0

                                                                                  Exwarp.Net.RFC.RFCMessageの派生クラス(MIMEMessageMailMessage)のヘッダーを取得するにはHeaderプロパティを使用します。このプロパティはメッセージに追加されているすべてのヘッダーフィールドを表すExwarp.Net.RFC.RFCHeaderFieldオブジェクト型の配列を返します。

                                                                                  [C#]
                                                                                  foreach(Exwarp.Net.RFC.RFCHeaderField header in msg.Header)
                                                                                  {
                                                                                      string body = header.Body;
                                                                                  }
                                                                                  [VB.Net]
                                                                                  Dim header As Exwarp.Net.RFC.RFCHeaderField
                                                                                  For Each header In msg.Header
                                                                                      Dim body As String = header.Body
                                                                                  Next
                                                                                  解説

                                                                                  msgExwarp.Net.RFC.RFCMessage及びその派生クラスのインスタンス(MIMEMessage,MailMessageetc.)を表します。

                                                                                  Headerプロパティを使用してメッセージに追加されたヘッダーフィールドのコレクションを取得します。For Eachループを使用すれば簡単にすべてのヘッダーフィールドを列挙できます。

                                                                                  HeaderFieldオブジェクトのBodyプロパティはヘッダーフィールドボディの値を返します。MIMEエンコード処理されている場合、デコードされた文字列が取得されます。

                                                                                  デコードせずにヘッダーフィールドボディを取得したい場合、HeaderFieldSourceプロパティを使用します。このプロパティはヘッダーフィールドソースを表すバイト列を返します。

                                                                                  | technicals | 12:07 | comments(1754) | 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) | - | - |
                                                                                      MIMEメッセージに追加されている子メッセージを取得する
                                                                                      0

                                                                                        MIMEMessageには、複数のMIMEMessageオブジェクトを追加することができます。追加された子メッセージのコレクションを取得するにはMIMEMessagesプロパティを使用します。

                                                                                        [C#]
                                                                                        foreach(Exwarp.Net.RFC.MIME.MIMEMessage child in msg.MIMEMessages)
                                                                                        {
                                                                                            //ANY PROCESS
                                                                                        }
                                                                                        [VB.Net]
                                                                                        Dim child As Exwarp.Net.RFC.MIME.MIMEMessage;
                                                                                        For Each child In msg.MIMEMessages
                                                                                            'ANY PROCESS
                                                                                        Next
                                                                                        解説

                                                                                        msgExwarp.Net.RFC.MIME.MIMEMessage及びその派生クラス(MIMEContentMessage,MailMessageetc.)のインスタンスを表します。

                                                                                        MIMEMessagesプロパティは、オブジェクトに格納されているすべての子MIMEメッセージのコレクションを表すExwarp.Net.RFC.MIME.MIMEMessageCollectionを返すので、For Eachループなどを使用して個々の子メッセージに対するカスタムプロセスを実行することができます。再帰的に呼び出すことで子メッセージに含まれるすべてのMIMEMessageを取得することもできます。

                                                                                        Exwarp.Net.Mail.MailMessageにもMIMEMessageプロパティが定義されていますが、MailMessageは常に1つの子メッセージしか受け入れません。複数のメッセージを追加するとメッセージソースの取得時に例外が発生しますので注意してください。これはメールとコンテンツを分離したオブジェクトモデルによる仕様上の制限です。

                                                                                        | technicals | 13:23 | comments(1849) | trackbacks(0) | - | - |
                                                                                        バグ報告:ボディが未定義のメールメッセージに添付メッセージを追加すると発生する例外が正常に発生しない
                                                                                        0

                                                                                          詳細ボディが未定義のメールメッセージに対して添付メッセージの追加及び削除の処理を行うと 通常ボディが未定義であることを示す例外が発生するが、エラーコードの誤った指定のためリソースが見つからないというエラーが代わりに発生する。


                                                                                          確認された日付2006/5/23


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


                                                                                          バージョン1.0.291.0


                                                                                          種類バグ


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


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

                                                                                          | technicals | 11:19 | comments(1846) | 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) | - | - |
                                                                                              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) | - | - |
                                                                                                MIMEContentMessageを操作する
                                                                                                0

                                                                                                  メールメッセージのコンテンツを扱う場合、MIMEMessageを使うよりMIMEContentMessageを使う方が便利です。

                                                                                                  [C#]
                                                                                                  Exwarp.Net.RFC.MIME.MIMEMessage jismsg =
                                                                                                      new Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"));
                                                                                                  jismsg.ContentType = "text/plain";
                                                                                                  jismsg.Body = "これが本文です。";

                                                                                                  Exwarp.Net.RFC.MIME.MIMEMessage eucmsg =
                                                                                                      new Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Encoding.GetEncoding("euc-jp"));
                                                                                                  eucmsg.ContentType = "text/plain";
                                                                                                  eucmsg.Body="これが本文です。";
                                                                                                  [VB.Net]
                                                                                                  Dim jismsg As New Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Encoding.GetEncoding("iso-2022-jp"))
                                                                                                  jismsg.ContetnType = "text/plain"
                                                                                                  jismsg.Body = "これが本文です。"

                                                                                                  Dim encmsg As New Exwarp.Net.RFC.MIME.MIMEContentMessage(System.Text.Endocing.GetEncoding("euc-jp"))
                                                                                                  eucmsg.ContentType = "text/plain"
                                                                                                  eucmsg.Body = "これが本文です。"
                                                                                                  解説

                                                                                                  メールコンテンツをカプセル化するためにMIMEMessageではなく、MIMEContentMessageオブジェクトを使用します。コンストラクタは必ず文字セットを表すSystem.Text.Encodingを受け取ります。今回は、iso-2022-jpeuc-jpの二つの文字セットのメッセージを作成します。

                                                                                                  iso-2022-jpは7ビットの文字セットですから何も問題はありませんが、euc-jpは8ビットの文字セットであるため、ボディにUS-ASCIIでは表現しきれないコードが現れます。

                                                                                                  MIMEでは、こうした問題に対処するためにContent-Transfer-Encodingヘッダーフィールドを使用して8ビットの文字セットが使用されていることや、7ビットで表現できるよう特殊な処理を施していることを明示することになっています。

                                                                                                  MIMEContentMessageオブジェクトを使用するとContent-Transfer-Encodingヘッダーフィールドは自動的に追加/変更されます。7ビット文字セットか8ビットの文字セットかを意識せずに自由な文字セットでメッセージを生成することができます。デフォルトでは8ビットの文字セットが使用されている場合、本文をbase64という方法で7ビット化し、Content-Transfer-Encodingヘッダーが自動的に追加されます。8ビット文字をそのままボディに含めることもできます。その場合Allow8bitEncodingプロパティをtrueに設定します。

                                                                                                  MIMEContentMessageMIMEMessageから派生しているため、MIMEMessage型として扱うことができます。

                                                                                                  今回のサンプルを実行するとjismsgeucmsgMessageSourceプロパティには次のようなバイト列が生成されます。

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

                                                                                                  ・$B$3$l$,K¥J8$G$9!#・(B
                                                                                                  [eucmsg]
                                                                                                  Content-Type: text/plain; charset=euc-jp
                                                                                                  Content-Transfer-Encoding: base64

                                                                                                  pLOk7KSsy9zKuKTHpLmhow==
                                                                                                  | technicals | 17:07 | comments(1757) | 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) | - | - |
                                                                                                    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

                                                                                                          メールに添付された添付メッセージを取得するには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を使ってメール受信(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) | - | - |