在一个小项目网络应用程序上工作......
我想对其进行设置,以便当用户向某个帐户发送电子邮件时,我可以启动一个 PHP 脚本来读取电子邮件、提取一些关键信息并将其写入数据库。
最好的方法是什么?检查新电子邮件的 cron 作业?
该应用程序在 MediaTemple 的“专用虚拟”服务器上运行,所以我想我有一个合理的控制水平,这应该给我一系列的选择。
我非常缓慢地学习绳索(PHP、MySQL、配置/管理服务器),因此非常感谢您的建议和洞察力。
干杯,马特·斯图勒
Procmail 是我的做法。这是我实际处理电子邮件中的文本以将其存档回 MySQL 数据库的示例。
:0:
* ^(From).*test@example.com
{
:0 c
| php /var/www/app/process_email.php
}
如果您可以控制可配置为允许 .forwards 或类似的可配置投递选项(qmail、postfix 和 sendmail 都是)的邮件传输代理,我只需在您的 .forward、.procmailrc 或其他文件中设置脚本类似的可编程交付机制。执行此操作时,如果您不希望其他人偶然发现该地址能够搞砸你的系统。
您还需要使用 php 使用的任何输入清理程序来避免来自恶意数据的 sql 注入之类的事情!我们都可以反思小圆桌的教训:
xkcd.com/327/
我最近在一个有这种需求的项目上工作。我在邮件帐户主目录中使用 .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);
?>
希望这对您有所帮助。
Cronjob 是此类任务的常见解决方案。用 PHP 检查新邮件是没有问题的。如果您运行 qmail-server(也许其他服务器也可以这样做?)您可以在每个“收到的邮件”上触发一个脚本,这会触发您的 php 脚本。