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

08
--
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
    一人で増やすよりもみんなで増やす方が簡単で速いのは当たり前!
    相互リンクもみんなで共有しながら増やす時代です
    被リンクが何もしなくても自然に増えつづける【共有型相互リンク】Wonder-Linkはこちらから!
    | technicals | 18:37 | - | - | - | - |
    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 | - | - | - | - |
        【無料】リンクを選択&拒否できる高機能な「共有型相互リンク」ネットワーク登場
        0
          相互リンクは増やしたいけど、変なサイトからリンクされて困ったことありませんか?
          Wonder-Linkなら任意のサイトからのリンクを拒否することができます。またページランクの高いサイトだけを厳選してリンクすることも簡単にできます。
          高機能&被リンクが何もしなくても自然に増えつづける【共有型相互リンク】Wonder-Linkはこちらから!
          | technicals | 10:04 | - | - | - | - |
          【質問】2台のSMTPサーバー間で電文の送受信を行なえますか?
          0
            Exwarp MailKitはSMTPクライアントとして使用することもできますから、SMTPというプロトコルの枠内であれば、SMTPサーバーへのメッセージの送信や受信は簡単に行なえます。
            たとえば、独自のメッセージを送信して応答を取得するなどということは、SMTPプロトコルの枠を超えていますので対応できない可能性もあります。
            さらに詳しく情報を希望なさる場合は、info@exwarp.comまでご連絡ください。
            | technicals | 09:30 | - | - | - | - |
            共有すれば相互リンクはもっと簡単に増える!
            0
              一人で増やすよりもみんなで増やす方が簡単で速いのは当たり前!
              相互リンクもみんなで共有しながら増やす時代です
              被リンクが何もしなくても自然に増えつづける【共有型相互リンク】Wonder-Linkはこちらから!
              | technicals | 22:32 | - | - | - | - |
              SMTP:メールの送信状況を確認する
              0
                ExwarpMailKit1.0.339.*ライブラリを使用すると、複数メールの送信中にメールが送信されるたびにイベントを検知することができます。大量のメールが送信されている場合に、メール送信の進行状況を確認することができます。
                [C#]
                private void OnMailMessageSent(object sender,Exwarp.Net.Mail.MailEventArgs e)
                {
                  Exwarp.Net.Mail.MailMessage mail = e.Mail;
                  //カスタム処理を記述します。
                }

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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


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