将所有收到的电子邮件重定向到 Python 脚本

Bas*_*asj 2 email python exim postfix

我想将所有传入的电子邮件*@example.com(来自互联网)重定向到我的服务器上运行的 Python 脚本,该脚本将执行各种工作。

  • 我已经为 完成了 DNS MX 记录example.com,将其定向到我的服务器
  • 我已经对 postfix 和 exim 进行了大量试验和错误,但没有任何效果,所以我删除了所有这些:apt-get remove postfixapt-get remove exim4,所以我准备开始重新安装其中一个(哪个允许此特定任务的最短解决方案?)

将所有传入电子邮件定向*@example.com到 Python 脚本的主要步骤是 什么?(包括:告诉 MTA 接受来自服务器外部、整个互联网等的电子邮件)

thr*_*rig 6

procmailPhilip Guenther认为有问题(在这种情况下很可能没用,因为.forward文件或等效物可以将邮件直接发送到您的程序,跳过因此不必要的复杂性procmail)。

执行摘要:删除procmail端口;该代码不安全,不应用作任何进一步工作的基础。

人们可能知道,早在 1990 年代末到 2001 年,我就是 procmail 的上游维护者。

所以一些其他的解决方案可能是可取的;这取决于邮件传输代理 (MTA)。另一种选择是使用 MTA 传送到本地文件或 IMAP,然后让您的程序解析该文件或 IMAP。这样做的好处是可以继续接受电子邮件并将其保存在某处;当您的程序有问题或无法运行时会发生什么?问题比实时邮件递送少...

进出口

可能要么复制 Sendmail.forward方法,要么弄清楚如何在 Eximese 中正确执行此操作。(我中止了,因为挖掘 Exim 文档需要花费很多时间。)elspy如果您想以 MILTER 方式进行 SMTP 时间扫描...

后缀

https://serverfault.com/questions/258469/how-to-configure-postfix-to-pipe-all-incoming-email-to-a-script#258491

天哪,看起来又长又复杂。

发邮件

在此处设置一个mailertable条目以将域(以及.domain子域,如有必要)的所有邮件转发给本地用户jdoe

example.com     local:jdoe
.example.com    local:jdoe
Run Code Online (Sandbox Code Playgroud)

然后.forward为该用户设置一个文件来运行必要的代码

$ cat ~jdoe/.forward
"|/etc/smrsh/process"
$ 
Run Code Online (Sandbox Code Playgroud)

这可能很简单

$ cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$ 
Run Code Online (Sandbox Code Playgroud)

因为电子邮件是在标准输入上输入的(如果同时process运行多个实例,这可能会很糟糕;大概您的实际代码处理这种竞争条件或者是幂等的......对吗?)。此方法也适用于复制 Sendmail 转发语法的任何其他 MTA,假设您可以让 MTA 将所有邮件重定向到特定用户。

这假设mailertable支持已启用、confFORWARD_PATH已设置、允许 Sendmail 运行代码(smrsh(8)但请注意,某些供应商可能会在不更新文档的情况下更改目录(运行strings /the/path/to/smrsh | fgrep /可能会有所帮助))并且诸如 selinux 之类的东西也不会破坏事物。

为Sendmail另一种选择是使用这种MILTER如MIMEDefang和执行任何业务逻辑是有必要的。(各种其他 MTA 支持 MILTER,或者有类似的东西。)

简单邮件传输协议守护进程 (OpenBSD)

看一下smtpd.conf(5)(针对 OpenBSD 6.4 的变化进行了更新)

action "mymda" mda "/path/to/your/command" user jdoe
match from any for domain example.com action "mymda"
Run Code Online (Sandbox Code Playgroud)