我试图在这篇文章中包含尽可能多的信息。
我在 Amazon EC2 Ubuntu 服务器上使用 Postfix,似乎我别名为地址的 PHP 脚本没有触发。邮件工作正常,但脚本只是没有触发。我可能错过了一些简单的事情,并且会很感激任何其他想法。
下面的代码是脚本的代码。目前,它只是一个基本脚本,用于将php://stdin
. 我不确定这是否是编写此脚本的最佳方式,但目前看来还可以,因为它只是用于解决此问题的临时方法。
#!/usr/bin/php -q
<?php
$data = '';
$fileName = "parsedData.txt";
$stdin = fopen('php://stdin', 'r');
$fh = fopen($fileName, 'w');
while(!feof($stdin))
{
$data .= fgets($stdin, 8192);
}
fwrite($fh, $data);
fclose($stdin);
fclose($fh);
?>
我通过将包含一些文本的 .txt 文件传递给它来验证它是否有效。
./test2.php < data.txt
现在我的 PHP 脚本似乎在本地运行良好,我需要确保它被正确调用。sudo chmod 777
已在 test2.php 脚本上运行。这是相关的 /etc/aliases 文件条目。
test: "|/usr/bin/php -q /var/test/php/test2.php"
每次更改此设置时,我都会运行 newaliases。这似乎是最正确的语法,因为它完全指定了 php 的位置。test@mydomain
未设置别名时,可以正常接收来自内部和外部的电子邮件。根据 syslog,这已成功交付给命令而不是 maildir。
postfix/local[2117]: 022AB407CC: to=<test@mydomain.com>, relay=local, delay=0.5, delays=0.43/0.02/0/0.05, dsn=2.0.0, status=sent **(delivered to command: /usr/bin/php -q /var/test/php/test2.php)**
别名也以以下方式编写但未成功(因为它们由于语法错误而转到 maildir 而不是命令,或者脚本没有触发)。
test: |"php -q /var/test/php/test2.php"
test: "|php -q /var/test/php/test2.php"
test: |"/usr/bin/php -q /var/test/php/test2.php"
test: "| php -q /var/test/php/test2.php"
test: "|/var/test/php/test2.php"
test: |"/var/test/php/test2.php"
我的后缀 main.cf 文件的相关部分如下所示 -
myhostname = domainnamehere.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = domainnamehere.com, internalawsiphere, localhostinternalaws, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command =
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
如果脚本被成功调用,我error_log("script has started!");
在开始时会出现在 php 日志文件中。test2.php
我确保进入 php.ini 以打开 error_logging 并指定保存位置,但我无法让它工作。能够让它工作会有所帮助,因为我可以判断脚本在执行该php://stdin
函数时是否失败,因为它处理电子邮件而不是 cat'ed .txt 文件可能存在一些问题。
我的最终目标是获得一项服务,将特定地址上的电子邮件及其附件保存到 MySQL 数据库,然后将每个文件/电子邮件的唯一代码返回给用户。有没有比使用 php 脚本更简单的方法来做这样的事情?squirrelmail 或 dbmail 之类的东西会这样做吗?
我已经完全用尽了我的想法。也许我应该尝试其他电子邮件服务?
哦,StackOverflow 的聪明人,帮助我!