用Python处理动态电子邮件地址

5 投票
2 回答
1598 浏览
提问于 2025-04-16 14:40

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

我需要写一个程序,处理不同客户的来邮件,处理完后根据发件邮箱的地址做一些事情(比如添加到数据库、回复邮件等)。

这个事情有点挑战性,因为这些邮箱地址不是固定的,而是动态的。比如,邮箱可能是这样的: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记录来处理这样的事情?

谢谢你的帮助。

更新:我对谷歌应用引擎的建议做了一些进一步的研究,可能可行,但我需要改变太多东西,增加太多复杂的部分。我还需要一个通用的邮件转发器,有人知道好的便宜的推荐吗?我更倾向于部署在处理所有邮件的系统上。看起来有人用postfix监听25端口并将请求转发到lamson。这听起来合理,我打算试试看,看看效果如何。我会更新我的结果。

更新2:我做了一些进一步的研究,发现了一些网站可以为我提供类似的服务,所以我接下来会看看它们。

http://mailgun.net

http://www.emailyak.com

2 个回答

0

对于lamson,你有没有尝试过这么简单的:

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

我在几个项目中使用过动态邮箱地址,但从来没有同时使用过动态子域名。关于你的问题,我有以下想法:

  1. 我从来没有用过Lamson,所以对此我无法发表意见。

  2. 我通常使用App Engine的API来接收和处理收到的邮件,这个方法效果很好。你可以很容易地把每封收到的邮件转化为一个基本的POST请求,发送到你自己的服务器,包含例如To(收件人)、From(发件人)、Subject(主题)和Message(内容)这些字段,然后用标准的django来处理这些请求。

    使用GAE邮件的一个缺点是你必须使用*@yourappname.appspotmail.com这样的格式,但你可以通过设置一个通用的邮件转发器来解决这个问题,把*@yourdomain.com的邮件都转发到secretaddress@yourappname.appspotmail.com。这样你就可以在自定义域名上接收邮件,并用GAE来处理它们。

    GAE的另一个问题/好处是你可以使用谷歌的服务器,而不是自己的服务器(至少在邮件处理方面是这样)。

  3. 关于子域名的问题,你可以尝试为MX记录设置通配符DNS,理论上这可以把发送到任何子域名的邮件都指向同一服务器。这样你就可以在所有子域名上接收邮件(好坏参半——要小心垃圾邮件!)

撰写回答