.NET 组件访问电子邮件收件箱的建议 [关闭]
Posted
技术标签:
【中文标题】.NET 组件访问电子邮件收件箱的建议 [关闭]【英文标题】:Recommendations for a .NET component to access an email inbox [closed] 【发布时间】:2010-09-06 06:57:18 【问题描述】:我被要求用 C# 编写一个 Windows 服务来定期监控电子邮件收件箱并将收到的任何消息的详细信息插入到数据库表中。
我的直觉是通过 POP3 来实现这一点,果然,谷歌搜索“.NET POP3 组件”会产生无数(好吧,146,000)的结果。
以前有没有人做过类似的事情,你能推荐一个不会破坏银行的体面的组件(最多几百美元)吗?
使用 IMAP 而不是 POP3 会有什么好处吗?
【问题讨论】:
github.com/jstedfast/MailKit 是一个不错的积极选择。 检查以下邮件组件以进行 NET Review thedownloadplanet.com/reviews/review-mail-component-for-net 您可以看到使用 IMAP、POP3 和 SMTP 的示例 【参考方案1】:通过 IMAP 协议,您可以访问 子文件夹,并设置消息状态(可见/不可见),还可以使用 IDLE 功能即时通知。
Mail.dll 包括 POP3、IMAP、SMTP 组件,支持 SSL 和强大的 MIME 解析器:
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();
请注意,这是我创建的商业产品。
您可以在https://www.limilabs.com/mail下载它
【讨论】:
【参考方案2】:我在我的应用程序 BugTracker.NET 中使用免费和开源的 SharpMimeTools。它非常可靠:
http://anmar.eu.org/projects/sharpmimetools/
查看文件 POP3Client.cs、POP3Main.cs 和 insert_bug.aspx
【讨论】:
我不知道你从哪里得到 Pop3Client.cs。我认为 SharpMimeTools 只是一个很棒的 Mime 解析而已。【参考方案3】:我推荐chilkat。他们有相当稳定的组件,你可以以 99 美元的价格为单个开发人员获得他们的电子邮件组件。就个人而言,我认为使用整个组件包更划算,因为它只有 289 美元,并且带有许多有用的组件。我与他们没有任何关系,尽管我可能听起来像我。
【讨论】:
我对 Chilkat 的唯一抱怨是 API 的“感觉”不是很 .Net(如果您知道我的意思的话)。例如“GetLastError()”而不是异常。虽然很棒的组件和很棒的价格。支持也绝对是一流的,在我有问题的时候非常快速的周转。 这可能是因为它是一个已移植到 .Net 的旧库。 异常确实“感觉”.net,但值得评论的是,Google 代码指南使用错误代码和断言而不是异常。他们还在文档中明确表示,他们并不认为使用异常是“错误的”,但他们确实提供了一些不这样做的充分理由。【参考方案4】:我会推荐AdvancedIntellect。有用于 POP3 和 IMAP(ASPNetPOP3 和 ASPNetIMAP)的组件。优质且响应迅速的支持 - 我记得我在周末收到了对我的问题的答复。
【讨论】:
【参考方案5】:您可能想查看我们的Rebex Mail component。它包括 IMAP、SMTP、POP3 协议和 S/MIME 解析器。
POP3
没有“未读”消息的概念,也没有搜索匹配特定条件的消息。 POP3
只是返回您收件箱中的所有邮件。
使用IMAP
,您可以指示 IMAP 服务器向您发送未读消息、自指定时间后到达的消息、来自特定用户的消息等。您不必将其全部下载到客户端并在那里进行过滤.
以下代码显示了如何使用 Rebex.Net.Imap
类从 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)
);
您可以从rebex.net/secure-mail.net/download.aspx下载试用版
【讨论】:
请声明这是您的产品。 @DMan:它已经出现在第一行几乎一年了(“您可能想查看我们的 Rebex 邮件...”)。我不是想隐藏我的联系。欢迎提出如何改进的建议(英语不是我的第一语言)。 对不起,我错过了那个微妙之处。我很抱歉。【参考方案6】:如果您使用开源 POP3 实现或免费提供的东西,那么您将有权修改代码并按照需要的方向扩展它。快速谷歌搜索到这个 C# POP3 code from Code Project 来检索消息。
滚动你自己的,或者至少扩展它有一些力量。
【讨论】:
这也不会破坏银行,因为初始成本为 0 美元。但是,应考虑正在进行的开发工作和总体“TCO”。【参考方案7】:Lumisoft 是开源的,包括 IMAP 和 POP 客户端(以及其他内容)。我多年来一直在使用它们,没有任何问题。
【讨论】:
您好,您可以分享示例代码以使用 C# 查看未见过的电子邮件列表吗?【参考方案8】:WCF 怎么样?它是免费的。
如果您有 Exchange 服务器: http://msdn.microsoft.com/en-us/library/bb397812.aspx
pop3 的示例: http://bartdesmet.net/blogs/bart/archive/2006/09/13/4417.aspx
【讨论】:
【参考方案9】:C#Mail 成本为 0 美元,但也获得了 GNU GPL 许可,因此请确保没问题。
【讨论】:
【参考方案10】:您可以使用 MailBee.NET 对象执行此操作:http://www.afterlogic.com/products/net-email-components
虽然我确实建议使用 IMAP,特别是因为它提供了此处提到的 IDLE 支持,但您可以对 POP3 执行相同的操作。有两种方法的简要说明,以及 IMAP IDLE 场景的完整示例:
http://www.afterlogic.com/wiki/Getting_notifications_about_new_messages_in_mailbox_%28IMAP_IDLE_and_polling%29
请注意,我隶属于 AfterLogic,如果您需要任何帮助,我很乐意为您提供帮助,请查看我们网站上的请求支持选项。
【讨论】:
【参考方案11】:IMAPX2 是最好的。使用 IMAP,您可以控制邮件服务器中的文件夹,这是使用 POP 无法做到的。 IMAPX 是您可以查看的开源代码,并且可以免费使用。
IMAPX 直接且可靠。
【讨论】:
以上是关于.NET 组件访问电子邮件收件箱的建议 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如果 Outlook 关闭,则从 C# OOM 发送的电子邮件将保留在发件箱中,直到下一次 Outlook 启动
Return Path 或 SendGrid 等软件如何知道有多少电子邮件到达收件箱? [关闭]
ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?
基于 WooCommerce 电子邮件通知中销售的产品的不同收件人