【问题标题】:Can two separate Windows services access the same POP mailbox simultaneously?两个独立的 Windows 服务可以同时访问同一个 POP 邮箱吗?
【发布时间】:2014-06-25 10:08:45
【问题描述】:

我们只有一个 POP 电子邮件帐户。此电子邮件帐户填写:

  • 主题为 XYZ 的邮件
  • 主题为 ABC 的邮件

我们有两个 Windows 服务

  • 服务 1 - 仅接收主题为 XYZ 的电子邮件(读取电子邮件,将其存储在数据库中,然后将其从邮箱中删除)
  • 服务 2 - 仅接收主题为 ABC 的电子邮件(读取电子邮件,将其存储在数据库中,然后将其从邮箱中删除)

这两个独立的 C# 服务(服务 1 和 2)(.Net 框架 4.0)能否在这个启用了 POP 的单个邮箱上同时运行并且在邮箱上没有任何访问冲突的情况下工作?

【问题讨论】:

  • 是的,没有理由不这样做。就像在您的手机上一样,您可以同步您的电子邮件,但也可以在您的台式计算机上 - 您使用 Outlook 与同一个电子邮件帐户同步。同样,当您说在 .NET 中发送电子邮件时,您可能会从网站上的多个用户发送电子邮件(例如订单通知) - 将有多个用户在您的网站上调用它。使用相同的电子邮件帐户但不同的内容可能发送到不同的电子邮件地址(但使用相同的 POP 详细信息/电子邮件服务器等......)

标签: c# pop3


【解决方案1】:

是的 - 通常对于可以按顺序连接同一个帐户的客户端数量没有限制。

注意事项

  • 您不应该经常连接 - 轮询和断开连接是预期的方法。
  • 由于 POP3 处理项目的方式,您可能在删除项目时遇到问题 - 如果服务器确实允许同一用户的 2 个客户端同时处于 TRANSACTION 状态,则可能需要以某种方式同步删除(不太可能)。
  • 除了独占的单用户访问之外,服务器可能对来自不同 IP 的频繁访问有一些保护 - 如果有任何限制,您需要与特定的服务提供商核实(也可能对于 2-3 个知名客户端,您会没事的)。

详情请见POP3 RFC 1939

【讨论】:

    【解决方案2】:

    是的,多个进程应该能够同时读取同一个邮箱。

    注意事项

    1. 服务器支持同时访问(应该)
    2. 这两个进程都没有删除消息。

    Caveat #2 很重要,因为两个进程都必须通读消息列表以找到适合它们的消息,但是两个进程都不知道另一个进程已经读取了哪些消息。如果任何一个进程删除了一条消息,它就会打开一个可能性,即一个进程已经知道该消息存在,并在第二个进程删除该消息后尝试读取该消息。 (竞争条件。)

    更好的方法可能是让一个“邮件阅读器”进程读取所有消息,将它们输入不同的队列(可能存储在数据库中),然后由其他两个“工作”进程处理。邮件阅读器进程成功将邮件放入队列后,就可以安全地从邮箱中删除邮件了。

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2014-11-05
      相关资源
      最近更新 更多