我们与各种客户和供应商交换电子邮件。 我试图实现一个解决scheme,我们的代表和客户或供应商之间的所有电子邮件通信都保存在我们的数据库中,所以在我们的pipe理系统中,我们有一个通信logging。 我曾经见过一些像Guru.com或者elance.com这样的项目网站。 您可以通过电子邮件来回传递,但系统会logging对话。
我一直在寻找几天,试图找出如何实现这一点。 在学习Guru.com的电子邮件时,我看到他们都去了一个普通的电子邮件地址。 该主题包含一个encryption的ID和“发件人:(自由职业者的名字或项目所有者的名字)”因此,似乎有一个盒子里的parsing器,该电子邮件的正文,保存到数据库,并转发电子邮件收件人(来自主题行)。
我用我的电子邮件供应商,但运行我自己的Web服务器(EC2,AWS Linux),所以我想我可以创build第二个MXlogging说“mail2”,并将其用于此应用程序。 然后我可以使用像“[email protected]”,并让我的服务器处理这些电子邮件。 我想这可以用sendmail milter完成,但是我不确定。
我在这方面寻求帮助或指导还没有发现任何东西。 我可能不知道正确的术语来search。 我已经读了很多milters,但似乎没有解决这个问题。 任何人都可以提供任何帮助或指向正确的方向吗?
谢谢
托姆
典型的stream程是相当一个交付。 你的问题被标记为procmail,所以我假设一个Procmail解决scheme是可以接受的。
您不应该需要任何额外的MXlogging或其他恶作剧。 Sendmail(或者任何现代的MTA;如果你因为遗留的原因而不是特别嫁给Sendmail的话,我会推荐Postfix)可以相当平凡地在传入消息上运行一个脚本。
当邮件被接受发送,MDA(在你的情况下,Sendmail)查找任何客户端钩子,如.forward文件。 如果find一个文件,文件将被parsing,并执行文件中的任何pipe道。 这就是通常在遗留系统上调用Procmail的方法(尽pipe最近,一个可以读取用户的.procmailrc并调用Procmail(如果find的话是标准Sendmailfunction集的一部分)的jar头食谱)。
你可以运行一个你自己的脚本来代替Procmail。 或者你可以从.procmailrc运行脚本(这是有益的,因为Procmail负责处理一些麻烦的错误情况)。
:0 | /path/to/script
现在,Procmail将打开/path/to/script ,并将消息作为标准input,并假定脚本负责处理它(传递它,和/或parsing然后丢弃它)。
添加一个:c标志,如果你想Procmail也保存到$DEFAULT :
:0c | /path/to/script
也许将收件人地址作为参数添加到脚本中:
ADDR=`formail -rtzxTo:` :0c | /path/to/script "$ADDR"
你的脚本可能很简单, 我将数据库细节留给您,并显示一个简单的Perl脚本来将每个传入消息logging到文件中。
#!/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;
这对于收到的电子邮件来说非常理想,但是简单直接的方法也可以让您的外拨通信logging到Bcc:传出邮件的帐户地址。 另一方面,如果您使用Web界面进行交互,则可以使用Web脚本进行编写,然后生成电子邮件并发送,并使用Procmail(或类似的)仅用于对话的传入部分。 这样可以简化系统,而牺牲仅仅通过写电子邮件来牺牲使用系统的可能性,正如从这种系统中很自然地得出的那样。
上面的Perl脚本非常简单 – 而且Procmailfunction非常强大 – 您可以从.procmailrc完成所有这些工作,但是对于实际的数据库处理,无论如何您都需要一个小型的外部脚本。