※ 重要 Gmail では安全性の低いアプリの許可を『有効』にする必要があります .NET用メール送受信クラスライブラリ (TKMP.DLL) ※ 2011-10-01 時点で 3.0.1 ※ 2018-06-20 時点で 3.1.8( 2017/02/15 作成 ) TKMP は、VB.net や C# から日本語環境を気にしないでメールの送受信が行える貴重なライブラリですが、IMAP に対応しておられるのに添付されているドキュメントや、WEB 上のサンプルコードにその記述がありませんでしたので作成しました。 ※ IMAP は 2011/08/11 に対応されています。 オンラインドキュメント C#
using System; using TKMP.Net; using TKMP.Reader; namespace MailRecTestCs { class Program { static void Main(string[] args) { // IMAP 用基本認証 BasicImapLogon logon = new BasicImapLogon("アカウント", "パスワード"); // IMAP 用ログイン( 993 は、SSL 用 ) ImapClient client = new ImapClient(logon, "サーバードメイン", 993); // SSL で接続する client.AuthenticationProtocol = AuthenticationProtocols.SSL; // 接続 client.Connect(); // メールデータ一覧の取得 IMailData[] md_i = client.GetMailList(); // メールデータの数 Console.WriteLine(md_i.Length); // メールデータの本文を取得 MailReader reader = null/* TODO Change to default(_) if this is not a reference type */; System.IO.Stream Body_data = null; // 全て表示 for (int i = 0; i <= md_i.Length - 1; i++) { // メッセージを読み込む( 同期処理 ) md_i[i].ReadBody(); // 読み出しの為にストリームを取得 Body_data = md_i[i].DataStream; // メールリーダで本文を解析 reader = new TKMP.Reader.MailReader(Body_data, false); // マルチパートの時は最初に見つかったテキストセクションの本文 Console.WriteLine(reader.MainText); // ヘッダ情報の取得 foreach (TKMP.Reader.Header.HeaderString headerdata in reader.HeaderCollection) { if (headerdata.Name == "From") Console.WriteLine(string.Format("From : {0}", headerdata.Data)); if (headerdata.Name == "Subject") Console.WriteLine(string.Format("Subject : {0}", headerdata.Data)); if (headerdata.Name == "Date") { Console.WriteLine(string.Format("Date オリジナル : {0}", headerdata.Data)); string target = headerdata.Data; // 日付データの最後に(おそらく)改行が含まれていたので (JST) + 1 で6バイト除去しています target = target.Substring(0, target.Length - 6); try { DateTime dt = System.DateTime.ParseExact(target, "ddd, d MMM yyyy HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None); Console.WriteLine(string.Format("Date : {0}", dt)); } catch (Exception ex) { Console.WriteLine("フォーマット変換できませんでした"); } } } } // 接続解除 client.Close(); Console.ReadLine(); } } }
VB.net
Imports TKMP.Net Imports TKMP.Reader Module Module1 Sub Main() ' IMAP 用基本認証 Dim logon As BasicImapLogon = New BasicImapLogon("アカウント", "パスワード") ' IMAP 用ログイン( 993 は、SSL 用 ) Dim client As ImapClient = New ImapClient(logon, "サーバードメイン", 993) ' SSL で接続する client.AuthenticationProtocol = AuthenticationProtocols.SSL ' 接続 client.Connect() ' メールデータ一覧の取得 Dim md_i As IMailData() = client.GetMailList() ' メールデータの数 Console.WriteLine(md_i.Length) ' メールデータの本文を取得 Dim reader As MailReader = Nothing Dim Body_data As System.IO.Stream = Nothing ' 全て表示 For i As Integer = 0 To md_i.Length - 1 ' メッセージを読み込む( 同期処理 ) md_i(i).ReadBody() ' 読み出しの為にストリームを取得 Body_data = md_i(i).DataStream ' メールリーダで本文を解析 reader = New TKMP.Reader.MailReader(Body_data, False) ' マルチパートの時は最初に見つかったテキストセクションの本文 Console.WriteLine(reader.MainText) ' ヘッダ情報の取得 For Each headerdata As TKMP.Reader.Header.HeaderString In reader.HeaderCollection If headerdata.Name = "From" Then Console.WriteLine(String.Format("From : {0}", headerdata.Data)) End If If headerdata.Name = "Subject" Then Console.WriteLine(String.Format("Subject : {0}", headerdata.Data)) End If If headerdata.Name = "Date" Then Console.WriteLine(String.Format("Date オリジナル : {0}", headerdata.Data)) Dim target As String = headerdata.Data ' 日付データの最後に(おそらく)改行が含まれていたので (JST) + 1 で6バイト除去しています target = target.Substring(0, target.Length - 6) Try Dim dt As DateTime = System.DateTime.ParseExact(target, "ddd, d MMM yyyy HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None) Console.WriteLine(String.Format("Date : {0}", dt)) Catch ex As Exception Console.WriteLine("フォーマット変換できませんでした") End Try End If Next Next ' 接続解除 client.Close() Console.ReadLine() End Sub End Module
関連する Microsfot のドキュメント POP3 アクセス用および IMAP4 アクセス用の TLS と SSL の構成: Exchange 2010 SP1 のヘルプ
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート
- C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (4)