Postfix,读取/处理电子邮件内容

Postfix,读取/处理电子邮件内容

这是我的应用程序的一个用例。所有发送到不同电子邮件地址的电子邮件都必须通过读取电子邮件内容以及以下信息进行处理:发件人电子邮件地址、主题行和发送日期/时间。这些信息稍后必须通过 HTTP POST 发送到 Web 服务 API 或存储在数据库中。

我们正在考虑使用 PostFix 作为我们的 MTA 软件。使用 PostFix,是否可以实现这样的过程来读取电子邮件?如果可以,请解释如何操作?或者是否有任何程序可以随时从 PostFix 读取电子邮件并将其存储在数据库中?

谢谢!

答案1

不,Postfix 本身无法做到这一点。正如您所说,它是一个 MTA,其中 T 代表传输。它不是邮件处理代理。但您可以配置不同的 MDA(邮件传递代理)。

你可以这样做进程邮件例如,或者任何其他通过 STDIN 接收邮件的程序。这些程序可以通过以下方式包含在 Postfix 中:管道配置选项。有关详细信息和说明,请参阅手册。

答案2

是的,Postfix 电子邮件服务器有 content_filter 的概念

cat /etc/postfix/master.cf

我补充说

filter  unix  -  n  n  -  -  pipe
    flags=Rq  user=ehookfilter  argv=/usr/local/bin/content_filter.sh
    -f ${sender}  --  ${recipient}

因此,postfix 服务器收到的每封电子邮件都会执行我的脚本(我的应用程序是 b2b,因此流量很低,如果需要,可以将其转换为守护进程)

/usr/local/bin/content_filter.sh

它大致基于http://www.postfix.org/FILTER_README.html

上面的 shellcontent_filter.sh依次执行我下面引用的 golang 代码smtp_filter,该代码负责解析电子邮件标题 + 正文……然后我让我的 go 代码遍历所有附件……它通过在我们的内部工作流程中进行 REST 调用来持久化

/usr/local/bin/smtp_filter ${curr_output_file_prefix} < in.$$ >> $curr_amalgamated_file

为了更好地理解我的 900 行 golang 代码的作用,下面是它提取的库

import (
    "bufio"
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "net/mail"
    "os"
    "strconv"
    "strings"
    "time"

    "context"
    "crypto/tls"
    "crypto/x509"
    "github.com/google/go-github/github"
    "golang.org/x/oauth2"
    "net/http"
    "regexp"

    "github.com/jaytaylor/html2text"
    "mime"
    "mime/multipart"
    "mime/quotedprintable"
    "encoding/json"
    "encoding/base64"
)

不用说这不是千篇一律的,但我之前对 SMTP 没有任何专业知识...如果需要的话,我正在考虑发布这个解决方案的完整说明...编写代码来读取电子邮件的一大好处是,这会将传入的电子邮件恶意软件载体转移到地面,因为我们不再需要读取电子邮件;-)

相关内容