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

10
--
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 | - | - | - | - |
        【質問】SMTP/POP over SSLに対応していますか?
        0
          Exwarp MailKit はSSLやTLS通信には対応しておりません。暗号化通信が必須のアプリケーションには使用できませんので予めご了承くださいませ。
          | information | 00:37 | - | - | - | - |
          絵文字付のメールを作成する
          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 | - | - | - | - |
              【質問】送信時間を指定するにはどうすればよいですか?
              0
                送信時間を指定するには、Exwarp.Net.Mail.MailMessageクラスのDateプロパティに日付情報を文字列で設定します。
                [C#]
                mail.Date = "9 Sep 2008 17:00:00 +0900";

                [VB.Net]
                mail.Date = "9 Sep 2008 17:00:00 +0900"

                [解説]
                mailはExwarp.Net.Mail.MailMessageのインスタンスをあらわします。設定値はRFC 1123準拠の文字列型である必要があります。
                +0900でタイムゾーンを設定しない場合GMT(世界標準時)で解釈される場合があります。
                | technicals | 18:56 | - | - | - | - |
                Exwarp MailKit 1.0.406.*リリースのお知らせ
                0
                  ExwarpMailKit1.0.406.*をリリースいたしました。
                  主な変更点は次のとおりです。
                  ■Exwarp.Net.RFC.MIME.MIMETransform.SafeModeプロパティ(STATICプロパティ)を追加しました。これは一部のSMTPサーバーがメールのリレー時に?=の後ろに強制的にホワイトスペースを追加する仕様に対処するために使用します。上記プロパティをTrueに設定した場合、ASCII文字列も強制的にMIMEエンコードして?= =?が出現しなくなります。
                  ■Exwarp.Net.Mail.MailOperations.GetAttachmentsOperationクラスの仕様を一部修正いたしました。
                  これは一部のメールエージェントが本文なしのメールを送信してきた場合でも添付ファイルの取得を可能にするためです。本仕様変更により、Content-Typeがmultipart/mixedであり、サブコンテンツにtext/*が含まれない場合でもGetAttachmentsカスタムオペレーションで添付ファイルを取得できるようになります。
                  | information | 16:40 | - | - | - | - |
                  【質問】1行の文字数を設定してMIMEエンコードしたメール本文を、Exwarp.Net.Mail.MailMessageオブジェクトを用いて送信できますか?
                  0
                    通常、メール本文にMIMEエンコードを行うことはありません。
                    メール本文は、Content-Typeヘッダーフィールドにcharsetが指定されている場合、その文字セットでエンコードされたバイト列で記述されます。
                    例外として、charsetで指定されている文字セットが8ビットエンコーディングの場合には、base64やquoted-printableという方法で7ビット化したバイト列を記述します。
                    ExwarpMailKitには現在のところ、本文の1行の文字列を調整する機能は実装しておりません。ただし、前述のbase64については、76文字を超えないように自動的に調整されます。
                    | technicals | 14:05 | - | - | - | - |
                    【質問】メールサーバーから受信メールを取得した際、ウイルスメールなどの対策は?
                    0
                      ExwarpMailKitを使用してメールを受信する際のウイルスメール対策などは特に用意されていません。

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

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

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

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

                      BinaryBodyプロパティが参照されるまでは、7ビットのテキストのままですので問題はありません。
                      | technicals | 12:27 | - | - | - | - |
                      【質問】サブミッションポート(port587)とSMTP AUTHを使った送信は行えますか?
                      0
                        Exwarp.MailKitに含まれるExwarp.Net.Smtpライブラリでは、送信ホストのポート番号を任意に変更することが出来ます。587番ポートを使用して送信するには、

                        [C#]
                        Exwarp.Net.Smtp.SmtpClient smtp = new Exwarp.Net.Smtp.SmtpClient(HOST_NAME,587);

                        [VB.Net]
                        Dim smtp As New Exwarp.Net.Smtp.SmtpClient(HOST_NAME,587)


                        のようにコンストラクタの2番目のパラメータに接続したいホストのポート番号を指定します。
                        SMTP_AUTHにつきましても、PLAIN,LOGIN,CRAM-MD5に対応しております。
                        ただし、TLSやSSLを利用した暗号化通信には対応しておりませんのでご注意ください。
                        | information | 10:14 | - | - | - | - |
                        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 | - | - | - | - |
                            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 | - | - | - | - |
                                【質問】2台のSMTPサーバー間で電文の送受信を行なえますか?
                                0
                                  Exwarp MailKitはSMTPクライアントとして使用することもできますから、SMTPというプロトコルの枠内であれば、SMTPサーバーへのメッセージの送信や受信は簡単に行なえます。
                                  たとえば、独自のメッセージを送信して応答を取得するなどということは、SMTPプロトコルの枠を超えていますので対応できない可能性もあります。
                                  さらに詳しく情報を希望なさる場合は、info@exwarp.comまでご連絡ください。
                                  | technicals | 09:30 | - | - | - | - |
                                  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 | - | - | - | - |
                                        HMAC-MD5(鍵付きMD5,KeyedMD5)を実行する
                                        0

                                          HMAC-MD5(鍵付きMD5やKeyed-MD5などとも表現される)は、SMTP認証などに使用される暗号化プロセスです。

                                          Exwarp MailKitを利用すると、HMAC-MD5も簡単に実行できます。

                                          [C#]
                                          Exwarp.Transform.ITransform trans =
                                            new Exwarp.Security.EncryptTransform.HMACMD5Transform("KEY_TOKEN");
                                          byte[] encoded = trans.Encode(SRC_BYTES);
                                          [VB.Net]
                                          Dim trans As Exwarp.Transform.ITransform
                                            trans = New Exwarp.Security.EncryptTransform.HMACMD5Transform("KEY_TOKEN");
                                          Dim encoded() as Byte
                                          encoded = trans.Encode(SRC_BYTES)
                                          解説
                                          KEY_TOKENは暗号化の際に使用するキーを表す文字列、
                                          SRC_BYTESは、暗号化されるバイト列を表します。

                                          HMAC-MD5を実行するために、Exwarp.Security.EncryptTransform.HMACMD5Transformのインスタンスを生成します。このクラスのコンストラクタには、暗号化に使用するキーを表す文字列をセットします。

                                          Encode()メソッドを使用して、暗号化を実行します。パラメータは暗号化されるバイト列をセットします。
                                          このメソッドは暗号化されたバイト列を戻り値として返します。

                                          | technicals | 23:35 | - | - | - | - |
                                          メールにカスタムヘッダーフィールドを追加する
                                          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) | - | - |
                                                    Propertyグリッドに表示されるプロパティ名を変更する
                                                    0

                                                      PropertyGridはオブジェクトのパブリックプロパティを表示するグリッド形式のコントロールです。Exwarp MailKitを使用すると、PropertyGridなどに表示されるプロパティ名を自由に変更することができます。

                                                      [C#]
                                                      public class MyClass:Exwarp.ObjectBase
                                                      {
                                                        [
                                                          Exwarp.Global.GlobalizedPropertyName("プロパティ名"),
                                                          Exwarp.Global.GlobalizedPropertyDescirption("プロパティの説明")
                                                        ]
                                                        public object SomeProp
                                                        {
                                                          get
                                                          {
                                                            return _SomeProp;
                                                          }
                                                          set
                                                          {
                                                            _SomeProp = value;
                                                          }
                                                        }
                                                      }
                                                      解説

                                                      Exwarp.ObjectBaseから派生したクラスはすべて、プロパティ名を自由に変更できます。

                                                      任意のプロパティに、Exwarp.Global.GlobalizedPropertyName属性と、Exwarp.Global.GlobalizedPropertyDescription属性を使用して実際に表示したいプロパティ名やプロパティの説明を設定します。

                                                      このクラスのインスタンスをPropertyGridに表示すると、プロパティ名は"プロパティ名"、プロパティの説明は、"プロパティの説明"となります。

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

                                                      | technicals | 13:59 | comments(1732) | trackbacks(0) | - | - |
                                                      Exwarp MailKit 1.0 製品版リリースのお知らせ
                                                      0

                                                        Exwarp MailKit 1.0を正式にリリースいたしました。現在LimitedCompleteの二つのバージョンが用意されています。

                                                        詳細はこちらをご覧ください。また、無料の体験版もぜひご試用ください。

                                                        | information | 13:15 | comments(1590) | trackbacks(0) | - | - |
                                                        Exwarp MailKit 1.0 Tryout リリースのお知らせ
                                                        0

                                                          Exwarp MailKit 1.0 Tryout を公開いたしました。バージョンは1.0.309.2となります。
                                                          ベータ版にExwarp.Global名前空間が追加されています。この名前空間にはプロパティ名とプロパティの説明を自由に設定できる属性が定義されています。PropertyGridなどにオブジェクトを表示させる際に利用できる機能です。その他微細な仕様変更も加えました。

                                                          本バージョンはTryoutであるため、幾つかの機能制限が設けられています。詳しい情報はExwarp MailKitのページで確認してください。

                                                          本バージョンの公開により、ベータ版の公開は終了いたします。また、近日中に製品版をリリースいたします。

                                                          | information | 13:44 | comments(1797) | 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) | - | - |
                                                              POP3Consoleソースコード公開のお知らせ
                                                              0

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

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

                                                                | information | 18:27 | comments(1662) | trackbacks(0) | - | - |
                                                                Exwarp MailKit 1.0 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) | - | - |
                                                                    SMTP-AUTH対応のお知らせ
                                                                    0

                                                                      次期バージョンにてExwarp.Net.Smtp.SmtpClientSMTP-AUTH機能を実装します。対応するのは、PLAINLOGINCram-MD5の3つの認証方式です。

                                                                      本機能の実装に伴い、Exwarp.Transform.HMACMD5Transformクラスが追加されています。このクラスはキー付きのMD5ダイジェスト生成をサポートします。

                                                                      これらの機能は、1.0.300.*より後のバージョンで提供されます。

                                                                      1.0.300.*は最終ベータの予定でしたが、リリース後多くの機能が追加されたため、再度最終ベータExwarp MailKit 1.0 Beta rc2をリリースする予定です。

                                                                      | information | 16:12 | comments(1785) | trackbacks(0) | - | - |
                                                                      ByteBufferのストリーム対応、及びRFC2231対応のお知らせ
                                                                      0

                                                                        Exwarp MailKitの機能を増強しました。時期バージョンにて使用できる機能は以下のとおりです。

                                                                        Exwarp.ByteBufferのストリームサポートExwarp.ByteBufferは、内部的にバイト配列を使用していましたが,次期バージョンから任意のSystem.IO.Streamを内部バッファとして使用することができます。
                                                                        これはサイズの大きなメッセージのメモリ消費対策の一環です。今後さらに対策強化してゆきます。

                                                                        Exwarp.Net.RFC.MIME.MIMEHeaderFieldのRFC2231対応これまでのバージョンのMIMEHeaderFieldRFC2311に対応していませんでしたが,次期バージョンから対応します。例えば次のようなヘッダーフィールドを認識できます。

                                                                        Content-Disposition: inline; filename*0*=iso-2022-jp''Read%20;
                                                                         filename*1*=My%20Text
                                                                        上記のフィールドはmsg.GetHeaderFieldParameterBody("Content-Disposition","filename")で戻り値"Read My Text"を取得できます。
                                                                        RFC2231形式での出力については現在非対応です。

                                                                        これらの機能は1.0.300.2より後のバージョンで提供されます。

                                                                        | information | 13:48 | comments(1985) | 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) | - | - |
                                                                          メールにバイナリ形式などの特殊な本文を含める
                                                                          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) | - | - |
                                                                            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) | - | - |
                                                                                        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) | - | - |
                                                                                          バグ報告:GetForwardingカスタムオペレーションが正しく動作しない。
                                                                                          0

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


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


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


                                                                                            バージョン1.0.291.0


                                                                                            種類バグ


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


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

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

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


                                                                                              確認された日付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) | - | - |
                                                                                                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

                                                                                                          RFCMessage及びその派生クラス(MIMEMessageMailMessage)にはMessageSourceプロパティが定義されています。このプロパティの値はByte型の配列ですが、このプロパティの値を取得したり更新したりすることでメッセージソースを簡単に操作できます。


                                                                                                          [C#]
                                                                                                          byte[] src = msg.MessageSource;
                                                                                                          System.Diagnostics.Debug.WriteLine(System.Text.Encoding.ASCII.GetString(src));
                                                                                                          [VB.Net]
                                                                                                          Dim src() As Byte = msg.MessageSource
                                                                                                          System.Diagnostic.Debug.WriteLine(System.Text.Encoding.ASCII.GetString(src))

                                                                                                          [解説]

                                                                                                          上記サンプルコードのmsgは、RFCMessageの派生クラスのインスタンスを表します。このインスタンスの作り方についてはこちらを参照してください。

                                                                                                          MessageSourceプロパティの戻り値をByte型の配列(この場合src)で受け取ります。

                                                                                                          取得したバイト列の内容をASCIIエンコーディングで文字列に変換しデバッグウィンドウに表示しています。これでバイト列のイメージが取得できます。ASCIIエンコーディングですから8ビット文字が出てくる場合正常に表示されません。文字化けします。

                                                                                                          | technicals | 14:01 | comments(2064) | 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) | - | - |