サーバに溜まっているメールのリストを取得します。メール本体を取得します。サーバから取得します。pop.Close()この使用例では、POPに貯まっているすべてのメールを取得して、なんらかの処理を行っています。上記の例ではコメントのみでなんの処理も行っていませんが、本来ならメールの内容を解釈し、それに応じてなんらかの処理を行うことになるでしょう。ダウンロードできるサンプルソースコードでは、処理する代わりに適当なファイル名で保存するようになっています。それでは引き続きメールを解釈する方法について解説します。POPから取得したメールの解釈POPからメールを取得することができたので、続いて取得したメールを解釈します。サンプルソースコードのMailクラスはメールの内容を解釈し、簡単に使用できるようにするクラスです。メールの構造まずは、POPサーバから受け取ったメール本体がどのような構造になっているか見てみましょう。下記のメールの実例(「sample1.txt」と「sample2.txt」)はサンプルソースコードと共に含めてあります。メールの実例(sample1.txt)上記はかなり単純化したメール本体の例です。メールはヘッダ部とボディ部にわかれています。最初の空行までがヘッダ部でそれ以降がボディ部です。上記の例では8行目までがヘッダ部、以降がボディ部となります。メールヘッダの各項目は「項目名:内容」という形式になっています。2822などにまとめられています。To(宛先)、From(差出人)、Subject(件名)などのように比較的分かりやすい名前が付いているので、大体の意味は分かるでしょう。通常は1つの項目が1行になるのですが、1行に収まりきらない場合(上記の例のSubject、Content-Type)、継続行の行頭が空白(タブか半角スペース)になります。メールボディはメールの本文です。日本語のメールの場合、多くはiso-2022-jpが使われています。どのようなコードが使われているかはヘッダ部のContent-Typeのcharsetを参照することにより分かります。本文2行目はピリオド2つで始まる行です。POPから取得した状態では終端と間違うのを防ぐためにピリオド2つになっています。Extensions)と呼ばれる仕様にまとめられています。上記の例のFrom、To、Subjectには日本語が使われていますが、この日本語部分の記述方法もMIMEによって決められています。MIMEの仕様は多岐に渡るため、主要なものだけでも次のように複数に分かれています。これら以外にもMIME関連のRFCはたくさんあります。2049添付ファイル次に、メールに添付ファイルがある場合を見てみます。以下の例はGIF画像が添付されているメールの例です。メールの実例(sample2.txt)このboundaryはメールごとに変わりますし、形式もいろいろなものがあります。boundaryで分割された部分は、それぞれヘッダ部、ボディ部で構成されています。最初のパートはContent-Typeがtext/plainとなっていますので普通のテキストであると分かります。この部分はiso-2022-jpにエンコードされたメール本文です。次のパートはimage/gifとなっていて、これが添付されたGIF画像です。GIF画像のようなバイナリファイルは、そのままメールの本文として表現することができないため、何らかのエンコードを行う必要があります。メールの場合はBASE64というエンコード方式を使うのが一般的になっています。エンコード方式はContent-Transfer-Encodingを見ると分かります。FrameworkではConvert.FromBase64Stringメソッド、Convert.ToBase64Stringメソッドが用意されているので簡単に変換することができます。サンプルソースコードのMailクラスは上記のようなメール本体を受け取って解釈します。メール本体の構造は非常に柔軟性がありますし、関連するRFCも多岐にわたります。Mailクラスはそのすべてに対応しているわけではないため、一部解釈できないメールもあるかもしれません。メールの構造を理解する第一歩にはなるかと思います。POPサーバから返されるリザルト文字列は"+ok"のように小文字の場合もありますので、その旨追記しました。切断時のQUITコマンドは必ず送るべきであると訂正しました。https://twitter.com/ShinichiAoyagi中学生のころにプログラミングの楽しさを知り、それ以来趣味として仕事としてプログラミングに関わるようになる。23才のときに株式会社ディーバを設立。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。12:00オルツ、日本語RAGでは軽量型LLMとして世界最高の精度と推論速度を達成した「LHTM-OPT2」をリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。