每当特定帐户收到电子邮件时,都需要一种踢PHP脚本的方法

时间:2020-03-05 18:44:42  来源:igfitidea点击:

正在开发一个小型项目网络应用程序...

我希望进行设置,以便当用户向特定帐户发送电子邮件时,我可以启动一个php脚本来读取电子邮件,提取一些关键信息并将其写入数据库。

最好的方法是什么?计划检查新电子邮件的cron作业?

该应用程序在MediaTemple的"专用虚拟"服务器上运行,因此我认为我具有合理的控制水平,这应该为我提供一系列选择。

我正在慢慢学习绳索(PHP,MySQL,配置/管理服务器),因此非常感谢建议和见解。

干杯,
马特·斯图勒

解决方案

回答

Cronjob是解决此任务的常见解决方案。用PHP检查新邮件是没有问题的。如果运行qmail服务器(也许其他服务器也可以这样做?),则可以在每个"收到的邮件"上触发脚本,从而触发php脚本。

回答

如果我们控制的邮件传输代理可以配置为允许.forwards或者类似的可配置传递选项(qmail,postfix和sendmail都是),则只需在.forward,.procmailrc或者其他服务器中设置脚本类似的可编程传递机制。如果我们不想让其他偶然发现该地址的人能够执行此操作,则应在邮件上进行一些认真的输入验证(确保发件人是我们所期望的人,接收的行匹配,数据是合理的)与系统混为一谈。

我们还想使用php使用的任何输入消毒器来避免从恶意数据中注入sql之类的东西!我们都可以反思一下小鲍比桌子的教训:

xkcd.com/327/

回答

我们可以使用.forward文件。

只需在管道符号后将PHP脚本的完整路径放入文件中即可:

|/full/path/to/script.php

回答

Procmail是我的方法。这是一个示例,在该示例中,我实际上处理了电子邮件中的文本,以将其归档回MySQL数据库。

:0:  
* ^(From).*[email protected]
{   
  :0 c
  | php /var/www/app/process_email.php

}

回答

我最近在一个有此需求的项目中工作。我在邮件帐户主目录中使用.forward文件取得了很大的成功。例如,假设我们正在尝试对地址[email protected]进行此操作,而我们正在使用的服务器是bar.com的邮件服务器。我们首先需要为此帐户创建一个.forward文件。在我工作的服务器上,这将是:

/home/email/[email protected]/.forward

该文件的内容如下:

" | /path/to/script.php"

此外,.forward文件的所有者为[email protected],并将其更改为600(仅对所有者进行读/写操作)。

接下来,我们需要设置要将邮件传递到的脚本(上面的/path/to/script.php。)
首先,该脚本需要是可执行的(+ x)​​。其余的仅读取STDIN并按我们希望的方式处理它。这是一个示例脚本,该脚本读取整个消息并将其存储在变量$ email中。

#!/usr/local/bin/php
<?php
$fd = fopen("php://stdin","r");
$email = '';
while($feof($fd)){
    $email .= fread($fd, 1024);
}
fclose($fd);
?>

希望这对我们有所帮助。