我运行一个一次性电子邮件服务,该服务接收所有传入邮件并将其转发到 PHP 脚本,该脚本将其存储在数据库中供人们查看。在此之前,我一直在使用带有 cPanel 的共享主机,这使得将电子邮件传输到脚本变得很容易。但是现在,我有了自己的 VPS,它没有 cPanel。我如何将电子邮件传输到脚本?此外,我如何将电子邮件传输到任何我将如何将某些指定域上的地址添加到我的脚本中?您会看到,除了主域之外,还有几个备用域可供人们在主域被阻止时使用,并且我希望每个域上的任何地址都可用(xyz@domain1、abc@domain2、anythingelse@domain3)。
VPS 安装了 Ubuntu 9.04,我一直在尝试使用 Postfix,但如果更简单的话,我可以切换到 Exim 或 Sendmail。
答案1
最后终于搞明白了。最后我使用了 Sendmail。我在 sendmail.mc 中打开了 virtusertable 功能,(请参阅Sendmail 网站),然后在 /etc/mail/virtusertable 中输入以下行:
@disposaldomain.net parser@localhost
它将把发往该域的所有邮件通过管道传送给用户“解析器”。然后,我在 /etc/mail/aliases 的末尾输入了以下行:
parser: "|/path/to/script/parser.php"
之后,我必须运行这些命令(从 /etc/mail):
makemap hash virtusertable.db < virtusertable
newaliases
/etc/init.d/sendmail reload
/etc/init.d/sendmail restart
就这样!
答案2
大多数 MTA 允许您配置要使用的传送代理 (MDA),我强烈推荐 procmail - 它提供了大量的功能,例如,可以相当简单地配置它以使用 spamassassin 过滤传入邮件、将电子邮件转发到您的 PHP 脚本、发送自动回复、转发副本给您自己以及将副本写入邮箱。
事实上,procmail 确实有自己的编程语言 - man 页面并没有说明这一点。有一些有書。或者尝试使用 Google 搜索文章。
大多数发行版使用 procmail 作为 MDA,并配合一些 MTA(尤其是 sendmail)。我对使用 Exim 持谨慎态度(请参阅其他地方的帖子)。通常,由于 postfix 提供自己的 MDA,因此 procmail 未配置 - 但可以轻松添加。
请注意,在 MTA 决定将邮件投递到何处之后,MDA 才会对邮件进行操作。如果您想在投递之前过滤邮件(例如,由您的 MTA 中继的邮件),那么您可能应该考虑使用过滤器。
答案3
在 Exim 中,这将由通配符别名和管道传输来处理。查找 Postfix 的等效项。可以配置别名以指定处理消息的命令。
如果您有其他想要以不同方式处理的域,请设置虚拟域别名并将通配符放在该域的别名文件中。
看起来 Postfix 有一个管道守护进程来处理命令的传递。
编辑:Exim 解决方案使用拆分配置。这需要安装软件包exim4-daemon-light
。我建议您也安装exim4-doc-html
软件包以提供文档http://localhost/doc/exim4-doc-html/html/spec_html/
。
/etc/exim4/conf.d/router
在named中添加一个文件380_local-config_program_router
。检查通用路由器 i 的选项(规范中的第 15 和 16 章)。根据需要更改脚本名称和域。
# 此路由器为 your.domain 中的所有用户运行 /usr/bin/your-script。 程序路由器: 司机 = 接受 require_files = /usr/bin/你的脚本 运输 = 程序运输 域名 = 你的域名
/etc/exim4/conf.d/transport
在命名中添加一个文件380_local-config_program_transport
。检查管道传输的选项(规范中的第 24 章和第 29 章)。您需要设置未指定值的选项。如果需要,还要设置可以有选项的正确命令。
程序传输: 驱动程序 = 管道 命令 = /usr/bin/your-script 当前目录 = 主目录 = 用户 = 组 =
我修改了配置这个帖子。
编辑2:看起来你也可以用 Postfix 来实现。使用通配符地址的解决方案虚拟域和一个maildrop 类型间接投递应该这么做。