c# - 请批评我提出的体系结构 : windows service for parsing incoming emails to asp. 网络数据库

标签 c# .net asp.net iis windows-services

我有一个现有的 asp.net c# 应用程序,我想为其实现一项允许用户通过电子邮件发布内容的功能。用户将电子邮件发送到指定地址,系统将解析电子邮件并使用电子邮件主题、正文和任何附加图像创建数据库条目。我建议的方法是创建一个 Windows 服务,该服务可以 ping 启用 pop3/imap 的电子邮件提供商以检索传入的电子邮件。然后该服务将使用我在此处找到的现有库解析电子邮件 http://www.lesnikowski.com/mail/ .用户将根据发件人字段中的电子邮件地址与 asp.net 成员匹配,然后将从该用户的电子邮件内容中插入新记录。最初,Windows 服务将在我为此目的设置的单独 EC2 实例上运行,因为当前主机不允许根访问。但最终我可能会将整个站点迁移到 EC2。

在开始之前,我想从大家那里获得一些关于我的整体方法和架构的反馈。更具体地说:

  • 我上面描述的是你会采用的方法吗?
  • 您是否建议实现网络服务来管理 Windows 服务与 asp.net 站点的数据库之间的交互?或者您会建议直接访问数据库吗?
  • 如果我将 Windows 服务编程为 每 30 次 ping 电子邮件提供商 秒,这会成为问题吗?
  • 您是否预见到我概述的这种方法会出现任何安全问题?
  • 可靠性问题如何(需要 24x7 服务)?

其他背景 --- asp.net 网站是一个库存系统,其中每个条目都有名称、描述和可选图像。从电子邮件中,主题将成为名称,正文将成为描述,图像就是图像。如果您熟悉 Posterous 博客平台,您将对我正在努力完成的工作有很好的引用。

最佳答案

Is what I described above the approach you would take?

如果您可以设置一个 Exchange 服务器或类似的东西来接收有关新电子邮件的通知,那会更好,这样您就不必每 30 分钟 ping 一次,但我从来没有这样做过,也无法告诉您是否这甚至是可能的。
这种方法本身听起来很合理,因为发送电子邮件真的很容易,而且每个人都知道如何去做。

Would you recommend implementing a web service to manage the interactions between the windows service and the database of the asp.net site? Or would you recommend hitting the database directly?

我会推荐一个额外的抽象层,因为它不需要太多的努力并且可以改进设计。这会降低性能(应该那么),所以这取决于您的要求。

If I program the windows service to ping the email provider every 30 seconds, will that be a problem?

取决于您的电子邮件提供商。通常情况下,如果他们允许:不。您应该明确地先询问他们。
如果是你自己的:你很高兴。
但是,如果您在线程内执行此操作并且同时多次访问 IMAP,则可能会出现问题。你应该尽量避免这种情况。

Do you foresee any security issues with this approach I've outlined?

是的。您可以轻松伪造已发送电子邮件的“发件人”字段。如果电子邮件是已知的,那么可能会出现问题。您应该明确地添加某种额外的安全措施,例如将邮件发送到 <SaltedHashThatIsDifferentForEachUser>@example.com . (例如 Facebook 也这样做)

What about issues with reliability (needs to be a 24x7 service)?

与您的服务相比,我发现您的电子邮件提供商的可靠性问题更多,因为只要保存了电子邮件,您以后仍然可以解析它们。
您应该调查 imap 的最大大小以避免被拒绝的邮件(例如,一旦您成功解析它们就删除它们)

关于c# - 请批评我提出的体系结构 : windows service for parsing incoming emails to asp. 网络数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294203/

相关文章:

c# - 为什么 EnumDropDownListFor 在 url 参数与模型中的字段相同时绑定(bind)不正确

c# - 如何在 C# 中创建自定义 System.Linq.Expression 类?

c# - 是否可以在 .NET MySqlCommand 中使用 MySql 用户定义变量?

c# - session 超时与定时器

c# - 使用 IoC 的项目中目录的推荐文件夹结构是什么

c# - 如何以编程方式更改系统时区

css - 如何使用 XSLT 文件在 ASP.net 页面中显示 CMS 集合

c# - 如何使用C#4.0 Win Form应用程序隐藏TreeView控件中某个TreeNode的复选框?

c# - Control.Invoke 从运行表单的同一线程

c# - 在作为数组的 ICollection 上调用 .toArray() 是否返回引用或副本?