编程语言
首页 > 编程语言> > 将所有传入的电子邮件重定向到Python脚本

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

作者:互联网

我想将所有收到的电子邮件重定向到*@example.com(从互联网)到我服务器上运行的Python脚本,后者将执行各种工作.

>我已经为example.com做了一个DNS MX记录,将它指向我的服务器
>我使用postfix和exim做了很多试验和错误,没有任何工作,所以我删除了所有这些:apt-get remove postfix和apt-get remove exim4,所以我准备开始一个新鲜的安装其中一个(哪一个可以为这个特定任务提供最短的解决方案?)

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

解决方法:

procmail is considered problematical作者:Philip Guenther(在这种情况下很可能没用,因为.forward文件或同等文件可以将邮件直接发送到你的程序,从而跳过procmail的不必要的复杂性).

Executive summary: delete the procmail port; the code is not safe and
should not be used as a basis for any further work.

As people may know, I was the upstream maintainer of procmail back in the late 1990’s though 2001.

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

进出口

可能要么复制Sendmail .forward方法,要么在Eximese中找出如何正确执行此操作. (我因为花了很多时间来浏览Exim文档而中止了.)如果你想以MILTER方式进行SMTP时间扫描,那就有elspy

后缀

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

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

$cat ~jdoe/.forward
"|/etc/smrsh/process"
$

这可能很简单

$cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$

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

这假设启用了mailertable支持,设置了confFORWARD_PATH,允许Sendmail运行代码(请参阅smrsh(8),但请注意某些供应商可能会更改目录而不更新文档(运行字符串/ / path / to / smrsh | fgrep /可能有帮助))而像selinux这样的东西也不会破坏东西.

Sendmail的另一个选择是使用MIL00,例如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"

标签:exim,python,email,postfix
来源: https://codeday.me/bug/20190816/1663247.html