这是我的应用程序的一个用例。所有发送到不同电子邮件地址的电子邮件都必须通过读取电子邮件内容以及以下信息进行处理:发件人电子邮件地址、主题行和发送日期/时间。这些信息稍后必须通过 HTTP POST 发送到 Web 服务 API 或存储在数据库中。
我们正在考虑使用 PostFix 作为我们的 MTA 软件。使用 PostFix,是否可以实现这样的过程来读取电子邮件?如果可以,请解释如何操作?或者是否有任何程序可以随时从 PostFix 读取电子邮件并将其存储在数据库中?
谢谢!
答案1
答案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 没有任何专业知识...如果需要的话,我正在考虑发布这个解决方案的完整说明...编写代码来读取电子邮件的一大好处是,这会将传入的电子邮件恶意软件载体转移到地面,因为我们不再需要读取电子邮件;-)