使用python处理动态电子邮件地址

时间:2011-03-29 16:07:43

标签: python django linux email lamson

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

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

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

例如,如果收到电子邮件'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记录来处理这样的事情?
  4. 感谢您的帮助。

    更新: 我做了一些关于谷歌应用程序引擎建议的研究,它可能会工作,但我需要更改太多的东西,它会添加太多的移动部件。我还需要一个捕获所有电子邮件转发器,谁知道任何好的便宜的?我更喜欢部署在处理所有电子邮件的系统上。看起来人们在端口25上使用了postfix监听并将请求转发给lamson。这似乎是合理的,我将试一试,看看它是怎么回事。我会用我的结果更新。

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

    http://mailgun.net

    http://www.emailyak.com

2 个答案:

答案 0 :(得分: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,这(理论上)会将发送到任何子域的所有邮件定向到同一服务器。这样您就可以在所有子域上接收电子邮件(无论好坏,请注意垃圾邮件!)

答案 1 :(得分:0)

对于lamson,你有没有尝试过这样简单的事情:

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