我被要求用 C# 编写一个 Windows 服务来定期监视电子邮件收件箱并将收到的任何消息的详细信息插入到数据库表中。
我的直觉是通过 POP3 做到这一点,果然,谷歌搜索“.NET POP3 组件”会产生无数(好的,146,000)结果。
以前有没有人做过类似的事情,你能推荐一个不会破坏银行的体面的组件(最多几百美元)吗?
使用 IMAP 而不是 POP3 会有什么好处吗?
使用 IMAP 协议,您可以访问子文件夹,并设置消息状态(可见/不可见),还可以使用IDLE功能进行即时通知。
Mail.dll包括支持SSL和强大的 MIME 解析器的POP3、IMAP、SMTP组件:
using(Imap imap = new Imap())
{
imap.Connect("imap.server.com"); // or ConnectSSL for SSL
imap.Login("user", "password");
imap.SelectInbox();
List<long> uids = imap.Search(Flag.Unseen);
foreach (long uid in uids)
{
IMail mail = new MailBuilder()
.CreateFromEml(imap.GetMessageByUID(uid));
Console.WriteLine(mail.Subject);
}
imap.Close();
}
请注意,这是我创建的商业产品。
我在我的应用程序 BugTracker.NET 中使用免费和开源的 SharpMimeTools。它非常可靠:
http://anmar.eu.org/projects/sharpmimetools/
请参阅文件 POP3Client.cs、POP3Main.cs 和 insert_bug.aspx
我推荐chilkat。他们有相当稳定的组件,你可以以 99 美元的价格为单个开发人员获得他们的电子邮件组件。就个人而言,我认为使用整个组件包更划算,因为它只有 289 美元,并且带有许多有用的组件。我与他们没有任何关系,尽管我可能听起来像我。
我会推荐AdvancedIntellect。有用于 POP3 和 IMAP 的组件(ASPNetPOP3 和 ASPNetIMAP)。良好的质量和响应迅速的支持 - 我记得我在周末收到了对我的问题的答复。
您可能想查看我们的Rebex Mail 组件。它包括IMAP、SMTP、POP3协议和S/MIME解析器。
POP3
没有“未读”消息的概念,也没有搜索匹配特定条件的消息。POP3
只需返回收件箱中的所有邮件。
使用IMAP
您可以指示 IMAP 服务器只向您发送未读消息、自指定时间以来到达的消息、来自特定用户的消息等。您不必将其全部下载到客户端并在那里进行过滤。
以下代码显示了如何使用类从Imap
服务器下载未读消息。Rebex.Net.Imap
// create client, connect and log in
Imap client = new Imap();
client.Connect("imap.example.org");
client.Login("username", "password");
// select folder
client.SelectFolder("Inbox");
// get message list - envelope headers
ImapMessageCollection messages = client.Search
(
ImapSearchParameter.HasFlagsNoneOf(ImapMessageFlags.Seen)
);
// display info about each message
Console.WriteLine("UID | From | To | Subject");
foreach (ImapMessageInfo message in messages)
{
Console.WriteLine(
"{0} | {1} | {2} | {3}",
message.UniqueId,
message.From,
message.To,
message.Subject);
}
// disconnect
client.Disconnect();
下面是组合多个搜索条件的示例。这将返回去年大于 100KB 的消息。
ImapMessageCollection messages = client.Search
(
ImapSearchParameter.Arrived(DateTime.Now.AddYears(-1), DateTime.Now),
ImapSearchParameter.Size(1024 * 100, Int32.MaxValue)
);
如果您使用开源 POP3 实现或免费提供的东西,那么您将有权修改代码并按照需要的方向扩展它。一个快速的谷歌从代码项目中找到了这个 C# POP3 代码来检索消息。
滚动你自己的,或者至少扩展它有一些授权。
Lumisoft是开源的,包括 IMAP 和 POP 客户端(以及其他内容)。我多年来一直在使用它们,没有任何问题。
WCF怎么样?免费。
如果您有 Exchange 服务器:http: //msdn.microsoft.com/en-us/library/bb397812.aspx
pop3 的示例:http: //bartdesmet.net/blogs/bart/archive/2006/09/13/4417.aspx
C#Mail 成本为 0 美元,但也获得了 GNU GPL 许可,因此请确保没问题。
您可以使用 MailBee.NET 对象执行此操作:http ://www.afterlogic.com/products/net-email-components
虽然我确实建议使用 IMAP,特别是因为它提供了此处提到的 IDLE 支持,但您可以对 POP3 执行相同的操作。有这两种方法的简要描述,以及 IMAP IDLE 场景的完整示例:
请注意,我隶属于 AfterLogic,如果您需要任何帮助,我很乐意为您提供帮助,请查看我们网站上的请求支持选项。
IMAPX2 是最好的。使用 IMAP,您可以控制邮件服务器中的文件夹,这是使用 POP 无法做到的。IMAPX 是您可以查看的开源代码,并且可以免费使用。
IMAPX 直截了当且可靠。