我不知道邮件传递。
但我需要redirect所有传入的电子邮件(*@mydomain.com)到一个PHP脚本。
我使用的是debian
存在一个简单的邮件服务器来做到这一点? (没有exim,postfix等)
我只需要redirect所有的邮件请求。
如果这是不可能的,没有exim,postfix等,我怎么能做到这一点?
谢谢!
当你说“一个PHP脚本”,你的意思是在其他地方的Web服务器上的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以上的地方编号,在别名之后,在处理本地用户的路由器(比如hubusers和procmail 。
将这些文件添加到传输路由器和路由器目录后,您需要运行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/virtual , newaliases和service postfix reload完成所有新的configuration。 另外,一定要chmod +x PHP脚本,并在顶部有一个PHP hashbang。
到目前为止,我所见过的最简单的解决scheme(无需额外的软件)使用IMAP PHP扩展来访问(通过IMAP)您的邮箱。
您可以在这里find有关IMAP扩展的最新文档的信息: http : //php.net/manual/en/ref.imap.php
然后,只需configurationcrontab以在期望的时间段内运行脚本。