使用后缀别名和 MySQL 管道

Posted

技术标签:

【中文标题】使用后缀别名和 MySQL 管道【英文标题】:Piping with postfix aliases and MySQL 【发布时间】:2011-10-07 02:32:27 【问题描述】:

我正在尝试将传入的电子邮件发送到重定向到 php 脚本的特定电子邮件地址。我正在使用带有存储在 mysql 中的地址和域信息的 Postfix。由于我认为管道无法从 mysql 表中完成,因此该地址在表中与系统别名配对:

在 /etc/aliases 中:

#Other aliases
php_mail_handler:  "| /usr/bin/php -q /home/mysite/htdocs/mail_handler.php"

这似乎在一定程度上起作用,因为 /var/log/mail.info 包含以下内容:

Jul 17 14:53:29 mysite postfix/qmgr[21974]: 39F726888003: from=<myaccount@gmail.com>, size=1476, nrcpt=1 (queue active)
Jul 17 14:53:30 mysite postfix/local[21981]: 39F726888003: to=<php_mail_handler@localhost>, orig_to=<php@mysite.com>, relay=local, delay=0.95, delays=0.28/0.01/0/0.66, dsn=2.0.0, status=sent (delivered to command:  /usr/bin/php -q /home/mysite/htdocs/mail_handler.php)

然而,php 脚本永远不会执行(它将时间戳和 stdin 上的任何内容写入日志文件)。该脚本在从命令行或通过 apache 调用时有效。其代码如下:

<?php

$f = fopen('php_handler_log.txt','a+');
$data = file_get_contents("php://stdin");
fwrite($f,date('Y-m-d h:i:s').': '.$data."\n");
fclose($f);

?>

有没有人知道为什么它可能无法正常工作或如何调试它?由于我在 CLI 的 php.ini 中指定的 php 错误日志中没有显示任何错误。

非常感谢,

垫子

【问题讨论】:

【参考方案1】:

您是否尝试在命令行上以用户nobody 执行脚本?

su -c "/usr/bin/php -q /home/mysite/htdocs/mail_handler.php" nobody

然后在运行测试时尝试使用现有的电子邮件地址,您可能会在发件人电子邮件中返回部分错误。

【讨论】:

我现在尝试使用“nobody”执行,这显然是错误所在,因为由于权限错误而无法打开日志文件。我的日志文件,它的目录,它的目录是 chmod 0777。我能做些什么来解决这个错误?感谢您的帮助。 您可以尝试登录/tmp,创建的文件归那里的创建者所有,至少用于调试。要获得真正的长期解决方案,您必须找到对目录及其父母有足够(请不要 777)权利的权利位置(可能需要所有父母目录上的 x 权利)

以上是关于使用后缀别名和 MySQL 管道的主要内容,如果未能解决你的问题,请参考以下文章

Xon.sh 和管道中的 Lambda 别名

pfsense 单IP网络别名管道限速的设置

为“管道 grep”创建别名

Perl:当子/管道的文件句柄被别名时,关闭子进程失败

shell别名,管道,用户配置文件,变量,read

使用 over() 和别名时的 mysql 错误