我想在我的 Ubuntu 14.04 服务器上创建以下场景:
- 设置邮件服务器(或者称为“邮件传输代理”?),该服务器仅负责接收邮件。无需设置从该服务器发送邮件。
- 对传入邮件执行基本过滤(检查邮件是否有正确的附件 - 确切地说是具有特定扩展名的文件)
- 仅将附件保存到某个特定文件夹
- 删除已处理的消息
我对邮件服务器几乎一无所知,我尝试了一下,Postfix
但如果我理解正确的话,有一些更好的邮件过滤和处理解决方案吗?我知道Python
,PHP
所以我可以使用其中一种语言来处理过滤/处理,但仍然不确定到底从哪里开始。
如果可能的话,我更愿意在收到邮件后立即处理,而不是在某些 Python 脚本上运行 cron 作业,并在保存附件后立即删除已处理的消息。
在这个特定时刻,我不需要设置任何安全或垃圾邮件/病毒防护。
由于我对如何设置此工作流程有点困惑,因此我想至少为每个步骤询问一个起点,并且非常欢迎提供进一步阅读的链接!我不要求完整的解决方案,但非常感谢一些关于软件包的提示,这些提示在这种情况下可能会有所帮助。
答案1
您表明您想在您的服务器上运行它。如果该计算机没有永久 IP 地址,因此它可以处理发送到特定邮件域的邮件,您需要设置从处理邮件的提供商处接收电子邮件。
由于您表明要在处理后删除邮件,因此您不应该关心提供商将所有邮件收集到一个用户帐户中,因此您应该进行设置。
fetchmail
然后,您可以使用或类似的程序来接收邮件,该程序与您本地运行的程序进行对话postfix
,仅侦听本地连接。 (如果您的服务器有固定的 IP 地址并且可以处理外部 stmp 连接,您可以跳过此步骤,只执行其余的操作)。
postfix
应该配置为用作procmail
您的邮箱命令(在main.cf
:
mailbox_command = procmail -a "$EXTENSION"
fetchmail
应该为执行处理的某些用户作为常规(我每分钟与我的提供商检查一次)cron 作业运行。该用户应该有一个~/.procmailrc
文件,可以进行一些过滤,并使用如下条目将电子邮件传递给脚本:
:0
$ ^Subject:.*some_text_that_has_to_be_in_the_subject_to_be_valid_for_processing
| /usr/local/bin/your_program
现在your_program
需要能够处理文件格式(标头后跟正文)。我使用 python 及其标准email
用于处理复杂的 MIME 附件的模块。
提示:在开发过程中将your_program
传入数据(上sys.stdin
)完全存储在某个文件中xyz
,这样您就可以查看并独立开发该数据(只需运行your_command < xyz
),这样您就不必经历将带有附件的电子邮件发送到测试该过程的该阶段。