将所有传入的邮件redirect到一个脚本

我不知道邮件传递。

我需要redirect所有传入的电子邮件(*@mydomain.com)到一个PHP脚本。

我使用的是debian

存在一个简单的邮件服务器来做到这一点? (没有exim,postfix等)

我只需要redirect所有的邮件请求。

如果这是不可能的,没有exim,postfix等,我怎么能做到这一点?

谢谢!

当你说“一个PHP脚本”,你的意思是在其他地方的W​​eb服务器上的PHP脚本,或者在本地的命令行上运行的PHP脚本?

我已经使用exim4和curl将邮件发送到其他地方的网站,通过创build一个自定义传输像这样:

send_to_site: driver = pipe command = /usr/bin/curl https://example.com/mail.php --data-urlencode "mail@-" user = nobody group = nogroup return_path_add delivery_date_add envelope_to_add 

如果你使用的是Debian的“分割configuration”选项,你可以在/etc/exim4/conf.d/transport/创build一个文件。 这里的command会将整个电子邮件(标题和正文) mail.php给variables$_REQUEST["mail"] mail.php 。 你需要让你的PHP脚本处理标题。

要触发传输,您需要configuration一个router ,以匹配您希望接收的任何电子邮件,并使用上述transport将其发送。 使用分割configuration,路由器进入/etc/exim4/conf.d/router/ 。 为了捕获所有邮件的特定域名,我还没有testing过,但我认为这是正确的:

 catchall_mail: driver = accept domains = mydomain.com transport = send_to_site 

Debian编号路由器目录中的文件来设置路由器签入的顺序。第一个匹配的路由器将用于处理电子邮件。 从我这里的configuration中,你可能想要在450以上的地方编号,在别名之后,在处理本地用户的路由器(比如hubusersprocmail

将这些文件添加到传输路由器和路由器目录后,您需要运行update-exim4.conf让Debian创build实际读取的configuration文件exim。

您需要设置一个POP3或(最好)一个IMAP服务器。 然后在那里创build你的电子邮箱正常。 使用适当的PHP函数来模拟邮件客户端,并定期轮询邮件框中的新邮件。

我将使用postfix来托pipe@yourdomain catchall帐户,然后让脚本使用catchall帐户邮箱作为脚本的基础。 另一个select是做类似于这个人做的事情,但是只有当你喜欢把邮件传送而不是从一个目录读取时。

如果你不想运行像postfix,exim4这样的完整的smtp服务器软件包,那么fakeSMTP就可以满足你的需求。 以下是来自网站的描述

fakeSMTP是一个PHP脚本,其function类似于任何传统的postfix SMTP服务器。 与inted结合使用时,当邮件客户端连接到服务器上的端口25时,将调用该脚本。

这个脚本实际上并没有发送任何邮件(虽然理论上这可以和sendmail结合起来使用)。 它也不包含任何授权function,因此仅充当configuration不当的开放式SMTP中继。 我写它为垃圾邮件发送者创build了一个蜜jar,同时也为了testing和概念validation。

fakeSMTP.php可以从提供的链接下载。 修改/etc/inetd.conf如下

 smtp stream tcp nowait root /path/to/fakeSMTP.php 

基本上所有传入的smtp连接将由fakeSMTP.php处理。 你应该将你的脚本合并到fakeSMTP.php中。 基于下面的例子

 $hp = new fakeSMTP; $hp->serverHello = 'axllent.org ESMTP Postfix'; // Server identity (optional) $hp->logFile = '/tmp/emails.log'); // Log the transaction files (optional) $hp->receive(); if (!$hp->mail['rawEmail']) exit; // Script failed to receive a complete transaction /* The script returns all the mail parts which you can process in $hp->mail(array) - read source for all details */ 

你的脚本应该使用$hp->mail(array)来处理邮件。

我没有看代码,但你可能需要修改它只接受你的域名的电子邮件。

正如Sirch在评论中提到的,你可能会收到大量的垃圾邮件,因为这个脚本/库没有包含RBL,地址检查,amavis / spamassassin。 如果你打算把它们合并到你自己的脚本中,可能还有点工作量。

如果你最终决定使用postfix,对于RBL,amavis / spamassassin的集成,你可以在HERE中按照答案。

我知道你可以用hypermail做这样的事情,但是这是用Perl编写的。 不确定一个PHP的实现。

不知道我正确理解你想做什么,但为什么不简单地收到你喜欢的邮件服务器的邮件,并让你的PHP脚本自动parsing邮箱(使用CRON可能)寻找新的邮件,挑选你需要的数据和删除邮件,如果你不需要他们了?

我做了Postfix和虚拟别名域。 在main.cf

 virtual_alias_domains = domain.name #Make sure this does _not_ appear in mydestination virtual_alias_maps = hash:/etc/postfix/virtual 

/etc/postfix/virtual

 @domain.name anything@localhost 

/etc/aliases

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

一旦文件被编辑,运行postmap /etc/postfix/virtualnewaliasesservice postfix reload完成所有新的configuration。 另外,一定要chmod +x PHP脚本,并在顶部有一个PHP hashbang。

到目前为止,我所见过的最简单的解决scheme(无需额外的软件)使用IMAP PHP扩展来访问(通过IMAP)您的邮箱。

您可以在这里find有关IMAP扩展的最新文档的信息: http : //php.net/manual/en/ref.imap.php

然后,只需configurationcrontab以在期望的时间段内运行脚本。