1

在一个小项目网络应用程序上工作......

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

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

该应用程序在 MediaTemple 的“专用虚拟”服务器上运行,所以我想我有一个合理的控制水平,这应该给我一系列的选择。

我非常缓慢地学习绳索(PHP、MySQL、配置/管理服务器),因此非常感谢您的建议和洞察力。

干杯,马特·斯图勒

4

5 回答 5

4

Procmail 是我的做法。这是我实际处理电子邮件中的文本以将其存档回 MySQL 数据库的示例。

:0:  
* ^(From).*test@example.com
{   
  :0 c
  | php /var/www/app/process_email.php

}
于 2008-08-29T03:46:01.983 回答
1

如果您可以控制可配置为允许 .forwards 或类似的可配置投递选项(qmail、postfix 和 sendmail 都是)的邮件传输代理,我只需在您的 .forward、.procmailrc 或其他文件中设置脚本类似的可编程交付机制。执行此操作时,如果您不希望其他人偶然发现该地址能够搞砸你的系统。

您还需要使用 php 使用的任何输入清理程序来避免来自恶意数据的 sql 注入之类的事情!我们都可以反思小圆桌的教训:

xkcd.com/327/

于 2008-08-28T21:49:55.570 回答
1

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

/home/email/foo@bar.com/.forward

该文件的内容如下:

“|/path/to/script.php”

此外,.forward 文件的所有者是 foo@bar.com,它被 chmod 设置为 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);
?>

希望这对您有所帮助。

于 2009-04-30T00:38:09.220 回答
0

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

于 2008-08-28T21:45:52.473 回答
0

您可以使用.forward文件。

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

|/full/path/to/script.php
于 2008-08-28T21:53:14.360 回答