【问题标题】:Process dynamic email addresses using python使用 python 处理动态电子邮件地址
【发布时间】:2011-03-29 16:07:42
【问题描述】:

我需要执行以下操作,我想知道是否有人做过类似的事情,如果有,他们做了什么。

我需要编写一个程序来处理不同客户的传入电子邮件,处理它们,然后根据电子邮件地址做一些事情(添加到数据库、回复等)。

使这更具挑战性的是,电子邮件地址不是静态的,而是动态的。例如。电子邮件将是这样的。 dynamic-email1@dynamic-subdomain1.domain.com 。在此示例中,电子邮件由客户端使用动态子域进行分组,它将是“动态子域 1”。客户将拥有分配给他们的自己的子域。每个客户都可以在其子域下创建自己的电子邮件地址,并将事件分配给该电子邮件。这些电子邮件地址和子域可以随时更改,添加新的,删除旧的等等。

因此,例如,如果收到一封来自电子邮件 'dynamic-email1@dynamic-subdomain1.domain.com' 的电子邮件,那么我需要在数据库中查找以找出哪个客户端是分配 'dynamic-subdomain1' 子域,然后查看哪个事件映射到 'dynamic-email1' 的电子邮件地址,然后执行该事件。我已经有了事件处理,只是不确定如何将电子邮件地址映射到事件。

由于电子邮件地址是动态的,因此使用基于文件的配置文件来处理这个问题确实很痛苦,最好在数据库中查找。我做了一些研究,发现一些项目做类似但不完全一样的事情。我找到的最接近的是 Zed Shaw 的 Lamson 项目:http://lamsonproject.org

更多背景:

  • 我目前正在使用 python、django、linux、mysql、memcached。

问题:

  1. 有没有人使用 Lamson 来做我想做的事情,你觉得怎么样?
  2. 是否还有其他项目可以做类似的事情,可能是在 python 之外的不同语言中?
  3. 如何设置我的 DNS MX 记录来处理这样的事情?

感谢您的帮助。

更新: 我对谷歌应用引擎的建议做了更多的研究,它可能会起作用,但我需要改变太多的东西,它会添加太多的移动部件。我还需要一个包罗万象的电子邮件转发器,有人知道有什么便宜的吗?我更喜欢部署在处理所有电子邮件的系统上。看起来人们已经使用 postfix 监听端口 25 并将请求转发给 lamson。这似乎是合理的,我将尝试一下,看看效果如何。我会更新我的结果。

更新 2: 我做了更多的研究,发现有几个网站可以为我做这样的事情,所以接下来我会看看它们。

http://mailgun.net

http://www.emailyak.com

【问题讨论】:

    标签: python django linux email lamson


    【解决方案1】:

    我在几个使用动态电子邮件地址的项目上完成了一些工作,但从未同时使用动态子域。我对您的问题的看法:

    1. 我从未使用过 Lamson,因此无法对此发表评论。

    2. 我通常使用App Engine's API 来接收和处理传入的消息,它工作得很好。您可以轻松地将收到的每条消息转换为您自己服务器上的基本POST 请求,例如ToFromSubjectMessage 字段并使用标准 django 处理这些字段。

      GAE 电子邮件的一个缺点是必须使用*@yourappname.appspotmail.com,但您可以通过为*@yourdomain.com 设置一个包罗万象的电子邮件转发器将所有内容定向到secretaddress@yourappname.appspotmail.com 来解决这个问题。这样您就可以在自定义域上接收消息并使用 GAE 处理它们。

      GAE 的另一个问题/好处是使用 Google 的服务器而不是您自己的服务器(至少在电子邮件方面)。

    3. 对于子域问题,您可以尝试为MX 记录设置wildcard DNS,这(理论上)会将发送到任何子域的所有邮件定向到同一服务器。这将使您能够在所有子域上接收电子邮件(无论好坏——注意垃圾邮件!)

    【讨论】:

    • 感谢 App Engine 的建议,我考虑过 app engine,但我不知道如何使用 apppotmail.com 电子邮件地址限制,我将不得不尝试一下前进,看看它是否会工作。一个问题是我的正常电子邮件 blah@mydomain.com 也会发送到 appengine。看起来对传入的电子邮件没有速率限制,这也很好。
    • 是的,我也考虑过“常规”电子邮件问题。也许通配符记录可以将子域指向例如app_mail.mydomain.com 包含全部内容(而不是在裸域上)?如果子域问题变得过于复杂,则可能值得考虑使用替代语法,例如user+command@mydomain.com,如果这样可以使事情变得更容易。
    • 应用程序的工作方式现在它大量使用子域,但我会看看我是否可以解决这个问题来尝试你的 user+command@mydomain.com 方法,它确实让事情变得有点更干净,但我猜我可能必须执行 user+commands@incoming.mydomain.com 或类似的操作,这样我的常规 @mydomain.com 电子邮件就不会发送到与自动邮件相同的 MX 服务器。感谢您的建议。
    【解决方案2】:

    对于 lamson,您是否尝试过以下简单的方法:

    @route("(address)@(subdomain).(host)", address=".+", subdomain="[^\.]+")
    def START(message, address=None, subdomain=None, host=None):
        ....
    

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2010-09-19
      • 2013-12-24
      相关资源
      最近更新 更多