※ 重要 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)






