接收邮件后立即解析
我有一些用户发送邮件,里面有我需要提取的文本。每个用户的邮件都对应一个单独的邮箱。我现在使用一个定时任务,每5分钟检查一次邮箱(postfix),看看有没有新邮件,然后把新邮件放到一个队列里,让工作程序来解析它们。我有两个主要问题:
- 有没有办法让我在邮件一到的时候就能解析,而不是一直去检查服务器?另外,我该怎么做才能让这个系统可以扩展?比如,如果每秒有50封邮件进来,我该怎么处理?
- 我在程序里把每个用户的邮箱地址写到postfix的配置文件里,指向对应的邮箱。这样做是不是太麻烦了?要不我干脆创建一个“接收所有邮件”的账户,这样就不用一个个写邮箱地址了?不过我知道“接收所有邮件”的账户更容易收到垃圾邮件。
3 个回答
0
我建议你使用Procmail来处理这个问题。它专门用来处理你收到的邮件,你可以把所有带有特定属性的邮件传送到你的应用程序。
对于接收所有邮件的地址(catchall addresses)来说,垃圾邮件的问题通常可以通过监控机器上的所有邮件来轻松解决。如果多个地址收到了相同的邮件,那很有可能就是垃圾邮件。
1
是的,这个操作其实很简单。你只需要设置一下postfix,让它把邮件转发到一个脚本,而不是转发到邮箱里。其实不一定要把所有邮件都转发,你可以让postfix只转发特定的邮件到脚本。这个脚本可以用任何编程语言写。我之前就用php写过这样的脚本好几次。如果你的服务器非常忙,比如每秒要处理50封邮件,你可以自己写一个过滤器服务器,然后让postfix把每条消息都传给你的过滤器。
要把邮件转发到脚本,你需要在别名文件里加一行,路径要指向这个文件。
someaccount |/usr/local/bin/emailParser.php
如果要把邮件转发到过滤器,那就需要在master.cf里进行配置,这个稍微复杂一点。
3
使用一个叫做 管道别名 的东西来接收邮件,然后用 celery 把它放进一个消息队列(MQ)里进行处理。