在C#中访问Imap

117

在C#中,是否有内置的方法可以访问IMAP服务器(使用SSL),或者是否有好用的免费库可用?


3
请检查以下链接:https://dev59.com/qHRB5IYBdhLWcg3wtJGF - Mauricio Scheffer
7
不行。你发的链接是关于Gmail特定的IMAP,而这篇文章与此无关。 - anon271334
77
请在将问题标记为重复时更加小心。我已经厌倦了到处看到“重复:[链接]”。很多时候,其他链接无论是不是相同的问题,都不能回答“复制者”想知道的内容! - βӔḺṪẶⱫŌŔ
8
无法添加回答,因为问题已关闭:https://github.com/jstedfast/MailKit 似乎是一个不错的选择和活跃的项目。 - Rory
6
将有用的问题标记为“不具建设性”确实不具建设性。 - Robert J
显示剩余2条评论
6个回答

90

我已经寻找IMAP解决方案有一段时间了,在尝试了不少之后,我选择了AE.Net.Mail

您可以通过进入代码选项卡并单击小的“下载”图标来下载代码。由于作者没有提供任何预构建的下载内容,因此您必须自行编译它(我认为您可以通过NuGet获取它)。在bin /文件夹中不再有.dll文件。

这里没有文档,我认为这是一个缺点,但是通过查看源代码(感谢开源!)和使用Intellisense,我能够快速掌握这个库。下面的代码特定地连接到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();

确保您查看Github页面获取最新版本和更好的代码示例。


1
这看起来太简单而难以置信了,哈哈。我要去看看! - bendr
4
@jase - 你说得对!我不确定问题具体是什么(似乎是属性文件?),但是我通过将所有相关文件复制到一个新的类项目中,成功编译了它。无论如何,我已经为你构建了库,所以你可以将它们作为.dll引用添加到你的项目中。http://dl.dropbox.com/u/8037514/AE.Net.Mail.zip 值得声明的是,这带有原始项目附带的任何保修和版权,并且如果出现问题等等,我不负责任。祝你好运! - Dominic K
4
+1 我刚刚在 VS2010 中下载并编译了 AE.Net.Mail 的最新提交,它完美地运行了。我比使用 ImapX 时有了更好的体验,感谢你的提示。这里的代码(http://www.woodoweb.com/index_files/archive-oct-2011.html)为我提供了良好的起点。 - D'Arcy Rittich
8
为什么人们会写出这样棒的东西,但基本上没有提供任何文献资料呢?我不理解。 - Simon_Weaver
3
它是可行的,但在更新版本中,构造函数应该像这样:ImapClient ic = new ImapClient("imap.gmail.com", "name@gmail.com", "pass", AuthMethods.Login, 993, true); - Ogglas
显示剩余16条评论

35

希望对一些人有用,你可能想看看我做的这个:

S22.Imap

虽然.NET有几个好的和文档完善的IMAP库可用,但没有一个是免费供个人使用,更不用说商业用途了...而我并不满意我发现的那些大多被遗弃的免费替代品。

S22.Imap支持IMAP IDLE通知以及SSL和部分消息获取。我花了一些时间制作文档并将其更新,因为我发现的那些项目中,文档经常很少或不存在。

随意试用一下,如果遇到任何问题,请告诉我!


1
首先尝试了AE.Net.Mail,但发现S22.Imap更好,无论是在文档还是我目前所需的功能方面。 - angularsen
我喜欢S22.Imap的概念。但是我缺少的是通过索引或消息编号访问的功能。 - Tejasvi Hegde
300 次为 S22.Imap 欢呼。在实际场景中,它既简单、高效又有用。.Search() 真是太棒了。 - Vishnoo Rath
1
有什么想法为什么我在尝试登录时会收到一个“InvalidCredentialsException”错误,其中包含消息“NO [WEBALERT some url] Web login required”? Gmail帐户上启用了IMAP。有什么想法吗? - Auri Rahimzadeh
1
很快就开工了。我喜欢它也使用默认的 .Net 邮件类。 - Savage
显示剩余2条评论

20

在.NET框架中没有IMAP的支持,需要使用第三方组件。

尝试使用https://www.limilabs.com/mail,它非常实惠且易于使用,同时支持SSL:

using(Imap imap = new Imap())
{
    imap.ConnectSSL("imap.company.com");
    imap.Login("user", "password");

    imap.SelectInbox();
    List<long> uids = imap.SearchFlag(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.TextDataString);
    }
    imap.Close(true);
}
请注意,这是我创建的商业产品。
您可以在此处下载:https://www.limilabs.com/mail

3
几分钟内下载并成功运行 :) 非常好。 - Moulde
它是否支持使用oAuth 2传递令牌而不是传递密码? - user1166905
它支持OAuth2:http://www.limilabs.com/blog/oauth2-gmail-imap-web-applications - Pawel Lesnikowski
2
很棒的组件,运行得非常好。试用版(几乎完全功能)测试了几周,然后购买了许可证。 - Alex from Jitbit
1
这确实是一个很棒的组件。与我们尝试过的所有开源东西不同,这个组件实际上是活跃并且更新(我是在2016年写这篇文章的)。谢谢@PawelLesnikowski。PS. 我没有任何关联。 - jazzcat
我找到的最好的一个,而且设置和使用都非常简单,哇! - agDev

15

MailSystem.NET 包含了您在 IMAP4 中所需的一切。它是免费且开源的。

(我参与了这个项目)


2
项目正在进行中,最新版本日期为:2009年12月14日 星期一 上午9:00。 - Kiquenet
1
今天没有太多功能需要添加,因为大部分需求已经得到满足。只有在提交时才会进行错误修复和小改进。但是这些并不多,库非常强大。 - user333306
4
这个项目似乎已经停止更新。无法正确使用IMAP4,没有更新并且作者也没有回复。 - Denis Vuyka
6
@alhambraeidos和@Denis是正确的。该项目几乎已经死了。样本不能直接在VS 2008或2010中构建。我将它们升级后,还要解决16个引用问题。文档已经过时,CodePlex页面在过去一年甚至更长时间内没有回复任何问题/评论。我放弃了,最终购买了Mail.dll(不,我与他们没有关联)。 - sohtimsso1970
2
项目已经很久没有更新了,IDLE不能正常工作。请参考http://mailsystem.codeplex.com/workitem/23586。 - Greg Dean
显示剩余8条评论

5

FYI:imapx似乎不支持IDLE。 - Greg Dean
ImapX现在支持IDLE扩展。 - Pavel Azanov
根据我的经验,这个库比AE.Net.Mail慢得多 - 这完全没有道理,但请注意! - Simon_Weaver
1
该库存在重大漏洞(v2.0.0.18)。 - David

2

Codeproject上的Imaplibrary是我使用的,但它没有所需的功能。我会检查一下xemail。 - UnkwnTech
我遇到了这个错误:页面未找到。请参考此链接:http://stackoverflow.com/questions/86553/working-with-pop-imap-email-and-net - Kiquenet
我已经更改了链接,谢谢你让我知道。 - Espo
REE:http://www.codeproject.com/KB/IP/imaplibrary.aspx 这个库非常棒。我上周开始用它作为邮件客户端,一直没有遇到任何问题。 - βӔḺṪẶⱫŌŔ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接