将指定域上的所有邮件转发给脚本

我运行一次性电子邮件服务,接受所有传入的邮件,并将其转发给PHP脚本,将其存储在数据库中供人们查看。 在此之前,我一直在与cPanel共享主机,这使得将电子邮件传送到脚本变得很容易。 但是,现在我有了自己的VPS,而且没有cPanel。 我如何pipe理电子邮件脚本? 此外,如何将电子邮件传送到某些特定域的任何地址到我的脚本? 除主域外,还有几个备用域,如果主域被阻塞,则可以使用其他域,并且在每个域上我希望可以使用任何地址(xyz @ domain1,abc @ domain2,anythingelse @ domain3)。

VPS安装了Ubuntu 9.04,我一直在试用Postfix,但是如果更容易,我可以切换到Exim或Sendmail。

最后想出来了。 最后我使用了Sendmail。 我打开了sendmail.mc中的virtusertablefunction(请参阅Sendmail网站上的信息),然后将/ etc / mail / virtusertable放在以下行中:

@disposaldomain.net parser@localhost 

哪个pipe道将所有邮件发送到该用户的“parsing器”域。 然后,我在/ etc / mail /别名的最后加上这一行:

 parser: "|/path/to/script/parser.php" 

之后,我必须运行这些命令(从/ etc / mail):

 makemap hash virtusertable.db < virtusertable newaliases /etc/init.d/sendmail reload /etc/init.d/sendmail restart 

那样做了!

大多数MTA允许你configuration使用哪个发布代理(MDA),我强烈build议procmail – 它提供了一个广泛的function,例如它相当简单的configuration它来过滤使用spamassassin收到的邮件,转发电子邮件到您的PHP脚本,发出一个自动回复,转发一份给自己,并写一个副本到邮箱。

事实上,procmail有自己的编程语言 – 手册不正确。 有一些书可用 。 或者试试Google的文章。

大多数发行版使用procmail作为MDA与一些MTA(特别是sendmail)。 我会小心使用Exim(见其他地方的post)。 通常,由于postfix提供了自己的MDA,procmail没有configuration – 但是可以很容易地添加 。

请注意,在MTA决定将它们传送到哪里之后,MDA将对消息进行操作。 如果你想在交付之前过滤消息(例如,由MTA转发的消息),那么你应该看看一个更好的。

在Exim中,这将由通配符别名和pipe道传输处理。 寻找相当于Postfix的。 别名可以configuration为指定一个命令来处理消息。

如果您有其他域要处理不同,请设置虚拟域别名,并将通配符放入域的别名文件中。

它看起来像Postfix有一个pipe道守护进程来处理交付给一个命令。

编辑:使用拆分configuration的Exim解决scheme。 这需要安装exim4-daemon-light包。 我build议你也安装exim4-doc-html包来提供文档在http://localhost/doc/exim4-doc-html/html/spec_html/

在名为380_local-config_program_router添加一个文件。 检查通用路由器i的选项(规范中的第15和16章)。 根据需要更改脚本名称和域名。

  #此路由器为your.domain中的所有用户运行/ usr / bin / your-script。
 program_router:
   driver = accept
   require_files = / usr / bin / your-script
   transport = program_transport
  域= your.domain 

在名为380_local-config_program_transport添加一个文件。 检查pipe道运输的选项(规范中的章节24和29)。 您将需要设置没有指定值的选项。 同时设置正确的命令,如果需要可以有select。

  program_transport:
  驱动程序=pipe道
  命令= / usr / bin / your-script
   current_directory = 
   home_directory = 
   user = 
   group = 

我从这个post修改了configuration。

Edit2:看起来你也可以用Postfix来做。 为虚拟域和maildroptypes间接传递使用通配符地址的解决scheme应该这样做。