将原始SMTP邮件发送到AMQP代理

时间:2012-08-13 02:04:22

标签: python smtp rabbitmq postfix-mta amqp

我正在寻找一种方法来获取大量入站SMTP邮件并将其放到AMQP代理上以进行进一步的路由和处理。邮件实际上不会以邮箱结尾,而是将SMTP用作邮件网关。

我在Python中编写了一个Postfix后队列内容过滤器,它将入站SMTP消息丢弃到RabbitMQ代理上。这很有效 - 我通过队列得到原始消息,消费者可以很好地接收它。问题是AMQP连接是用每条消息创建和拆除的......每次都会从头开始重新执行内容过滤器脚本。我想这最终会成为一个性能问题。

如果我可以利用重入的东西,我可以重用连接。或者也许我只是错误地接近整个事情......

3 个答案:

答案 0 :(得分:1)

通过普通TCP建立AMQP连接非常快。也许如果您使用的是SSL,那么这是另一个故事,但您确定将原始消息排入AMQP交换机将成为瓶颈吗?我的猜测是,实际通过SMTP传递消息的速度要慢得多,因此排队的速度不会影响系统的吞吐量。

如果这篇文章确实成为瓶颈,我宁愿使用Sinatra或Rack创建小型Web服务器,但听起来您可能更喜欢基于Python的解决方案。让后缀内容过滤器使用curl执行HTTP POST到Web服务器,该服务器维护与AMQP服务器的持久连接。

当然,现在你有一个额外的移动部件,你需要考虑监控,错误处理和安全性。

答案 1 :(得分:0)

使用SwiftMQ。它有一个JavaMail bridge,可以从IMAP或POP3帐户接收您的电子邮件,将其转换为JMS消息,然后可以由AMQP 0.9.1 and/or AMQP 1.0,当然还有JMS客户端使用。

答案 2 :(得分:0)

你可以让Postfix交付你所有或任何emails to an external program,你可以把它们扔到任何你想要的地方。 Some examples can be found here.