python - 将原始 SMTP 消息发送到 AMQP 代理

标签 python smtp rabbitmq postfix-mta amqp

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

我用 Python 编写了一个 Postfix After-Queue Content Filter,它将入站 SMTP 消息丢弃到 RabbitMQ 代理上。这很好用——我通过队列获取原始消息,消费者很好地接收了它。问题是每条消息都会创建和断开 AMQP 连接……内容过滤器脚本每次都会从头开始重新执行。我想这最终会成为一个性能问题。

如果我可以利用一些可重入的东西,我就可以重用连接。或者也许我只是错误地处理了整件事......

最佳答案

通过纯 TCP 建立 AMQP 连接非常快。也许如果您使用的是 SSL 那么这是另一回事,但您确定将原始消息排队到 AMQP 交换将成为瓶颈吗?我的猜测是,实际上通过 SMTP 传递消息会慢得多,所以您可以多快地排队并不会影响系统的吞吐量。

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

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

关于python - 将原始 SMTP 消息发送到 AMQP 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11927409/

相关文章:

python - 将 CitusDB 与 SQL-alchemy 结合使用

python - 如何转换 Pandas 数据框并将行转换为列

python - Python中的for循环并从文件中读取输入

grails - 如何发送带有布局的电子邮件

python - 通过数组中的对象引用特定参数?

python - Sendmail Errno[61] 连接被拒绝

java - 无法使用 SMTP 发送电子邮件(获取 javax.mail.MessagingException : Could not convert socket to TLS;)

python - 不同机器上的 RabbitMQ 代理

java - Rabbit SSL 配置不起作用-{ssl_upgrade_error,{tls_alert ,"certificate unknown"}}

rabbitmq - 在 Spring4+STOMP+SockJS 应用中配置外部 Broker(RabbitMQ)