GmailのサーバーからのIMAPメッセージを確認するためにC#.NETのライブラリを使用して、[閉じました]
質問
誰もが任意のサンプル・コードを持っていますか?
解決
ここに記載されているURLがあなたに興味があるかもしれません。
http://www.codeplex.com/InterIMAPする
の拡張であった。
<のhref = "http://www.codeproject.com/KB/IP/imaplibrary.aspx?fid=91819&df=90&mpp=25&noise=5&sort=Position&view=Quick&fr=26&select=2562067#xx2562067xx" のrel = "noreferrer 「> http://www.codeproject.com/KB/IP/imaplibrary.aspx?fid=91819&df=90&mpp=25&noise=5&sort=Position&view=Quick&fr=26&select=2562067#xx2562067xx の
他のヒント
私ははい、それはSSLをサポートしないと言うことができます上記のプロジェクトの作者として。
私は現在、それがIMAPサーバと対話することができる速度を上げるために完全に非同期になるライブラリの新しいバージョンに取り組んでいます。
このコード、完全ではないが、上記にリンクされているコードプレックスサイトから、(また、SSLをサポートしています)元の同期ライブラリーと一緒に、ダウンロードすることができます。
私は MailKit を見てお勧めしますます。
MailKitについての素晴らしいことの一つは、すべてのネットワークAPIは(私は他のIMAPライブラリで利用できる見ていない何か)解約されているということです。
また、私はそのことを知っている唯一のライブラリーは、メッセージのスレッドをサポートしています。
using System;
using System.Net;
using System.Threading;
using MailKit.Net.Imap;
using MailKit.Search;
using MailKit;
using MimeKit;
namespace TestClient {
class Program
{
public static void Main (string[] args)
{
using (var client = new ImapClient ()) {
using (var cancel = new CancellationTokenSource ()) {
client.Connect ("imap.gmail.com", 993, true, cancel.Token);
// If you want to disable an authentication mechanism,
// you can do so by removing the mechanism like this:
client.AuthenticationMechanisms.Remove ("XOAUTH");
client.Authenticate ("joey", "password", cancel.Token);
// The Inbox folder is always available...
var inbox = client.Inbox;
inbox.Open (FolderAccess.ReadOnly, cancel.Token);
Console.WriteLine ("Total messages: {0}", inbox.Count);
Console.WriteLine ("Recent messages: {0}", inbox.Recent);
// download each message based on the message index
for (int i = 0; i < inbox.Count; i++) {
var message = inbox.GetMessage (i, cancel.Token);
Console.WriteLine ("Subject: {0}", message.Subject);
}
// let's try searching for some messages...
var query = SearchQuery.DeliveredAfter (DateTime.Parse ("2013-01-12"))
.And (SearchQuery.SubjectContains ("MailKit"))
.And (SearchQuery.Seen);
foreach (var uid in inbox.Search (query, cancel.Token)) {
var message = inbox.GetMessage (uid, cancel.Token);
Console.WriteLine ("[match] {0}: {1}", uid, message.Subject);
}
client.Disconnect (true, cancel.Token);
}
}
}
}
}
のクロスは、他の同様の質問から掲載しました。彼らはとても似てもらうときに何が起こるかを参照してください?の
私は今、しばらくの間、IMAPソリューションを検索してきた、とかなりの数を試した後、私は<のhref =「https://github.com/andyedinborough/aenetmail」のrel = "noreferrerに行きますよ"タイトル=" AE.Net.Mail "> AE.Net.Mail を。
私はマイナス面を考慮し何のドキュメント、ありませんが、私は、ソースコード(オープンソースのイェーイ!)を見て、インテリセンスを使用してこれをかき立てることができました。以下のコードは、GmailのIMAPサーバーに特異的に接続します:
// Connect to the IMAP server. The 'true' parameter specifies to use SSL
// which is important (for Gmail at least)
ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass",
ImapClient.AuthMethods.Login, 993, true);
// Select a mailbox. Case-insensitive
ic.SelectMailbox("INBOX");
Console.WriteLine(ic.GetMessageCount());
// Get the first *11* messages. 0 is the first message;
// and it also includes the 10th message, which is really the eleventh ;)
// MailMessage represents, well, a message in your mailbox
MailMessage[] mm = ic.GetMessages(0, 10);
foreach (MailMessage m in mm)
{
Console.WriteLine(m.Subject);
}
// Probably wiser to use a using statement
ic.Dispose();
私はこのライブラリか何かと提携していないんだけど、私はそれが非常に高速で安定したことがわかりました。
Lumisoft.net のIMAPクライアントとすることができますサーバーコードの両方を持っていますつかいます。
私はGmailからのメールをダウンロードするためにそれを使用しました。オブジェクトモデルは、最高ではないですが、それは実行可能であり、むしろ柔軟で安定しているようだ。
ここではそれを使用する私のスパイクの部分的な結果です。これはエンベロープを持つ最初の10のヘッダをフェッチし、次いで、完全なメッセージをフェッチする
using (var client = new IMAP_Client())
{
client.Connect(_hostname, _port, _useSsl);
client.Authenticate(_username, _password);
client.SelectFolder("INBOX");
var sequence = new IMAP_SequenceSet();
sequence.Parse("0:10");
var fetchItems = client.FetchMessages(sequence, IMAP_FetchItem_Flags.Envelope | IMAP_FetchItlags.UID,
false, true);
foreach (var fetchItem in fetchItems)
{
Console.Out.WriteLine("message.UID = {0}", fetchItem.UID);
Console.Out.WriteLine("message.Envelope.From = {0}", fetchItem.Envelope.From);
Console.Out.WriteLine("message.Envelope.To = {0}", fetchItem.Envelope.To);
Console.Out.WriteLine("message.Envelope.Subject = {0}", fetchItem.Envelope.Subject);
Console.Out.WriteLine("message.Envelope.MessageID = {0}", fetchItem.Envelope.MessageID);
}
Console.Out.WriteLine("Fetching bodies");
foreach (var fetchItem in client.FetchMessages(sequence, IMAP_FetchItem_Flags.All, false, true)
{
var email = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(fetchItem.MessageData);
Console.Out.WriteLine("email.BodyText = {0}", email.BodyText);
}
}
IMAPのための.NETフレームワークのサポートはありません。あなたは、いくつかのサードパーティ製のコンポーネントを使用する必要があります。
Mail.dll電子メールコンポーネントを試してみてください、それは非常にの手頃な価格ののだと簡単に使用するために、それはまた、SSL のをサポートしています:
using(Imap imap = new Imap())
{
imap.ConnectSSL("imap.company.com");
imap.Login("user", "password");
imap.SelectInbox();
List<long> uids = imap.Search(Flag.Unseen);
foreach (long uid in uids)
{
string eml = imap.GetMessageByUID(uid);
IMail message = new MailBuilder()
.CreateFromEml(eml);
Console.WriteLine(message.Subject);
Console.WriteLine(message.Text);
}
imap.Close(true);
}
これは、私が作成した商用製品であることに注意してください。
あなたはここでそれをダウンロードすることができます。 https://www.limilabs.com/mailする
MailSystem.NET には、IMAP4のためのすべてのあなたの必要性が含まれています。これは、フリー&オープンソースです。
(私はプロジェクトに参加してい)
こののSSLバージョンのソースはこちらです: http://atmospherian.wordpress.com/downloads / の
別の方法:HigLabo
https://higlabo.codeplex.com/documentationする
グッド議論: https://higlabo.codeplex.com/discussions/479250する
//====Imap sample================================//
//You can set default value by Default property
ImapClient.Default.UserName = "your server name";
ImapClient cl = new ImapClient("your server name");
cl.UserName = "your name";
cl.Password = "pass";
cl.Ssl = false;
if (cl.Authenticate() == true)
{
Int32 MailIndex = 1;
//Get all folder
List<ImapFolder> l = cl.GetAllFolders();
ImapFolder rFolder = cl.SelectFolder("INBOX");
MailMessage mg = cl.GetMessage(MailIndex);
}
//Delete selected mail from mailbox
ImapClient pop = new ImapClient("server name", 110, "user name", "pass");
pop.AuthenticateMode = Pop3AuthenticateMode.Pop;
Int64[] DeleteIndexList = new.....//It depend on your needs
cl.DeleteEMail(DeleteIndexList);
//Get unread message list from GMail
using (ImapClient cl = new ImapClient("imap.gmail.com"))
{
cl.Port = 993;
cl.Ssl = true;
cl.UserName = "xxxxx";
cl.Password = "yyyyy";
var bl = cl.Authenticate();
if (bl == true)
{
//Select folder
ImapFolder folder = cl.SelectFolder("[Gmail]/All Mail");
//Search Unread
SearchResult list = cl.ExecuteSearch("UNSEEN UNDELETED");
//Get all unread mail
for (int i = 0; i < list.MailIndexList.Count; i++)
{
mg = cl.GetMessage(list.MailIndexList[i]);
}
}
//Change mail read state as read
cl.ExecuteStore(1, StoreItem.FlagsReplace, "UNSEEN")
}
//Create draft mail to mailbox
using (ImapClient cl = new ImapClient("imap.gmail.com"))
{
cl.Port = 993;
cl.Ssl = true;
cl.UserName = "xxxxx";
cl.Password = "yyyyy";
var bl = cl.Authenticate();
if (bl == true)
{
var smg = new SmtpMessage("from mail address", "to mail addres list"
, "cc mail address list", "This is a test mail.", "Hi.It is my draft mail");
cl.ExecuteAppend("GMail/Drafts", smg.GetDataText(), "\\Draft", DateTimeOffset.Now);
}
}
//Idle
using (var cl = new ImapClient("imap.gmail.com", 993, "user name", "pass"))
{
cl.Ssl = true;
cl.ReceiveTimeout = 10 * 60 * 1000;//10 minute
if (cl.Authenticate() == true)
{
var l = cl.GetAllFolders();
ImapFolder r = cl.SelectFolder("INBOX");
//You must dispose ImapIdleCommand object
using (var cm = cl.CreateImapIdleCommand()) Caution! Ensure dispose command object
{
//This handler is invoked when you receive a mesage from server
cm.MessageReceived += (Object o, ImapIdleCommandMessageReceivedEventArgs e) =>
{
foreach (var mg in e.MessageList)
{
String text = String.Format("Type is {0} Number is {1}", mg.MessageType, mg.Number);
Console.WriteLine(text);
}
};
cl.ExecuteIdle(cm);
while (true)
{
var line = Console.ReadLine();
if (line == "done")
{
cl.ExecuteDone(cm);
break;
}
}
}
}
}
LumiSoft.ee - かなり簡単、素晴らしい作品。 .NET 4.0でコンパイルします。
ここでは、彼らのlibと例に必要なリンクです。 ダウンロードメインます:
http://www.lumisoft.ee/lsWWW/Download/Downloads/
コード例:
ここに配置されています... lsWWW /ダウンロード/ダウンロード/例/
.NETます:
ここに配置されています... lsWWW /ダウンロード/ダウンロード/ネット/
私は(IMAPClientLumiSoft.codeplex.com)のCodePlex上で自分のlibを使用して簡単なサンプルを入れています。あなたは自分のサイトから直接自分のライブラリを取得する必要があります。私は自分のコードを維持していないにも私は、コードへの権利を持っていないので、私はそれらを含めておりません。上記のリンクに移動し、それを直接ダウンロードしてください。私はそれがエラーなしでやっている.NET 4.0でそれのすべてを構築するために、私のVS2010でLumiSoftプロジェクトのプロパティを設定します。 彼らのサンプルはかなり複雑とするときは一例コーディング多分過度にタイトです。私は、これらは一般的には、高度なレベルの開発を目指していることを期待していますが。
彼らのプロジェクトは、マイナーな改良と働きました。微調整:彼らのIMAPクライアントは、Winフォームの例は、デバッグポイントで破壊からVSを防ぐ「リリース」としてプロジェクトのプロパティで設定されています。あなたは、ブレークポイントが動作するためのプロジェクトに「アクティブ(デバッグ)」を設定するためのソリューション「Configuration Managerを」使用する必要があります。その例は偉大なタイトなコーディング...教育ツールとしてではない本当の良いイベントハンドラの匿名メソッドを使用します。あなたはハンドラ内のブレークポイントを設定することができますので、私のプロジェクトでは、「名前付き」イベントメソッドハンドラを使用しています。しかし彼らは、インラインコードを処理するための優れた方法です。彼らは、.NET 3.0以降で利用可能新しいラムダメソッドを使用しなかったが、私はそれらを変換しようとしていなかったかもしれません。
そのサンプルから、私は最低限にIMAPクライアントを単純化します。