我正在构建 Web 应用程序,用户可以通过向应用程序发送电子邮件来添加新内容。每个用户使用的电子邮件地址都是自定义的(例如。[电子邮件保护]) 并将其动态创建为Postfix虚拟邮箱。
用户需要能够将电子邮件发送到其自定义邮箱地址([电子邮件保护])并且我想要处理每封收到的电子邮件,解析其内容并用电子邮件中的数据填充我的数据库。
我尝试使用Postfix After Queue 过滤器但我真正想要的是将电子邮件保存到用户的虚拟邮箱文件夹中后对其进行处理。
答案1
我会采取另一种方法来解决这个问题。
我不会创建单独的邮箱,而是创建一个通用地址,然后通过 /etc/aliases 将其发送到一个脚本,我将在该脚本中执行所有解析和存档。如果您不打算在邮箱中存储电子邮件,则没有必要使用邮箱,这是一项巨大的开销。
在 /etc/aliases 中你可以进行如下输入
usermail: "|/path/to/myscript.pl"
然后所有电子邮件将直接发送到 myscript.pl,您可以在那里处理。
答案2
我想到两种可能的解决方案:
第一种可能性:您可以在 Postfix 中设置自定义mailbox_command
。对于 Postfix 收到的每封电子邮件,它将调用mailbox_command
配置文件中定义的,并在 上以纯文本形式提供电子邮件stdin
。这样,您就可以决定如何处理每封电子邮件。不过,您必须自己解析电子邮件的标题。您可以查看Postfix 文档了解有关如何实现此功能的更多想法。其他应用程序(例如)procmail
也可以充当mailbox_command
并帮助您处理收到的邮件。
第二种可能性:使用 Dovecot 存储电子邮件。您不需要启用 Dovecot 的 POP/IMAP 模块。但是,Dovecot 附带了出色的doveadm
实用程序,可让您查询邮箱并从中读取。使用doveadm
,您可以自动选择新电子邮件、上周的电子邮件、阅读整封电子邮件、只阅读其中的一部分、删除旧邮件等等。这是一个功能强大的实用程序,我在各种脚本中使用它来清除旧电子邮件或learn-as-spam
为用户提供文件夹。查看文档在 wiki 中。
(注:我也在 Stackoverflow 上发布了这篇文章,那里的发帖人问了同样的问题)
答案3
有一个程序叫进程邮件(LDA)几乎可以完全满足您的要求。
答案4
我会使用 POP3/IMAP 轮询邮箱,下载邮件并处理它们(而不是尝试将某些东西集成到 Postfix 堆栈中)。如果您的解析系统发生故障或需要离线一段时间,这还会为您提供一定程度的容错能力。