我们与各种客户和供应商交换电子邮件。我正在尝试实施一种解决方案,将我们的代表与客户或供应商之间的所有电子邮件通信保存在我们的数据库中,这样我们的管理系统就可以记录这些通信。我在一些项目网站上看到过类似的系统,比如 Guru.com 或 elance.com。您通过电子邮件进行来回通信,但系统会记录对话。
我已经搜索了几天,试图弄清楚如何实现这一点。在研究 Guru.com 的电子邮件时,我发现它们都发送到一个共同的电子邮件地址。主题包含一个加密 ID 和“发件人:(自由职业者的姓名或项目所有者的姓名)”,因此似乎该框上有一个过滤器,可以解析该电子邮件的正文,将其保存到数据库,然后将电子邮件转发给收件人(来自主题行)。
我使用供应商的电子邮件,但运行自己的 Web 服务器(EC2、AWS Linux),因此我认为我可以为“mail2”创建第二个 MX 记录,并将其用于此应用程序。然后我可以使用类似“[电子邮件保护]“并让我的服务器处理这些电子邮件。我认为这可以通过 sendmail 邮件过滤器来完成,但我并不十分确定。
我搜索了有关此问题的帮助或说明,但一无所获。我可能不知道该搜索什么词。我读过很多关于过滤网的文章,但似乎没有一个能解决这个问题。有人能提供帮助或为我指明正确的方向吗?
谢谢
汤姆
答案1
典型的流程更像是交付流程。您的问题已标记为进程邮件所以我认为 Procmail 解决方案是可以接受的。
您不需要任何额外的 MX 记录或其他恶作剧。Sendmail(或任何现代 MTA;如果您由于历史原因并不特别依赖 Sendmail,我建议您使用 Postfix)可以非常轻松地在传入消息上运行脚本。
当邮件被接受并进行传送时,MDA(在您的例子中是 Sendmail)会查找任何客户端钩子,例如文件.forward
。如果找到,则解析该文件,并执行该文件中的任何管道。这就是在旧系统上调用 Procmail 的典型方式(尽管最近,读取用户.procmailrc
并在找到时调用 Procmail 的固定配方是标准 Sendmail 功能集的一部分)。
除了 Procmail,您还可以运行自己的脚本;或者也可以运行您的脚本.procmailrc
(这很有用,因为 Procmail 可以处理许多令人讨厌的错误情况)。
:0
| /path/to/script
现在,Procmail 将以/path/to/script
消息作为标准输入打开,并假定脚本负责处理它(传递它,和/或解析然后丢弃它)。
:c
如果您希望 Procmail 也保存到,请添加一个标志$DEFAULT
:
:0c
| /path/to/script
也许将收件人地址作为参数添加到脚本中:
ADDR=`formail -rtzxTo:`
:0c
| /path/to/script "$ADDR"
您的脚本可能非常简单;我将数据库详细信息留给您,并显示一个简单的 Perl 脚本将每条传入消息记录到文件中。
#!/usr/bin/perl
use strict;
use warnings;
open (DB, ">>", "/path/to/file.db") or die "Complication: $!";
print DB "Correspondent: $ARGV[1]\n";
while (<>) {
print DB;
}
close DB;
这是理想的传入电子邮件,但记录外发通信的简单直接的方法就是密件抄送:外发邮件上的帐户地址。另一方面,如果您使用 Web 界面进行交互,则可以从 Web 脚本进行编写,然后生成电子邮件并发送,并仅将 Procmail(或类似程序)用于对话的传入部分。这将在一定程度上简化系统,但代价是牺牲了仅通过编写电子邮件即可使用系统的可能性,而这种系统很自然地具备这种可能性。
上述 Perl 脚本非常简单 —— 并且 Procmail 功能多样 —— 您可以从 中完成所有这些操作.procmailrc
,但对于实际的数据库处理,无论如何您都需要一个小的外部脚本。