cPanel 电子邮件过滤器管道到未执行的程序



我无法获得特定地址的电子邮件过滤器来正确执行其通过管道传输到的脚本,没有任何反应。 没有日志消息,没有错误消息 - 我无法判断发生了什么以及为什么它不执行:

过滤器(来自:/home/myUser/ect/myDomain/register/filter(:

headers charset "UTF-8"
if not first_delivery and error_message then finish endif
#Bounced Registrations
if
$header_subject: contains "Message Delivery Failure"
then
pipe "| php -q /home/myUser/dev/scripts/email/bouncedEmail.php"
endif

我尝试了许多组合:

pipe "| /home/myUser/dev/scripts/email/bouncedEmail.php"
pipe "/home/myUser/dev/scripts/email/bouncedEmail.php"
pipe "|php -q /home/myUser/dev/scripts/email/bouncedEmail.php"
pipe "/usr/local/bin/php -q /home/myUser/dev/scripts/email/bouncedEmail.php"
pipe "| /usr/local/bin/php -q /home/myUser/dev/scripts/email/bouncedEmail.php"

但是当我将保存的退回电子邮件提供给脚本时,脚本会从命令干净地运行 - 下面捕获错误的电子邮件地址并将"Script Ran"打印到日志文件中:

[> email]$ cat badEmail.msg | php -q bouncedEmail.php

脚本,设置权限:0755

#!/usr/local/bin/php -q
<?php
ini_set("log_errors", 1);
ini_set("error_log", "bouncedEmails.log");
include '/home/myUser/dev/scripts/includes.php' ;
error_log("Script ran") ;
// read from stdin
$fd = fopen("php://stdin", "r") ;
$email = "" ;
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
// handle email
$lines = explode("n", $email);
// empty vars
$splittingheaders = true;
for ($i=0; $i < count($lines); $i++){
//if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."n";
// look out for special headers
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
list($fName,$fAddy) = explode("<",$matches[1]) ;
$fAddy = str_replace(">","",$fAddy) ;
//error_log("FROM: " .$lines[$i],0) ;

}
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
list($tName,$tAddy) = explode("<",$matches[1]) ;
$tAddy = str_replace(">","",$tAddy) ;
error_log("Bad Email: $tAddy",0) ;
writeDB($tAddy) ;
}
if (preg_match("/^REFID: (.*)/",$lines[$i],$matches)) {
$uid = $matches[1] ;
}
//}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}

// update any DB records with matched email addresses
function writeDB($to) {
$query = "UPDATE userTable SET user_email='',user_emailVerify=0 WHERE user_email=?" ;
list($upCount,$upError) = dbUpdate($query,array($to)) ;
}
unset($pdo) ;
?>

那么我做错了什么,阻止电子邮件过滤器脚本执行?

我修复了它,但我不知道为什么我的原始脚本不起作用。

即使文件已设置为可执行文件,也无法识别#!/usr/local/bin/php -qchmod 0755 bouncedEmails.php

因此,为了使它正常工作,在pipe to a program中我添加了:php -q /home/myUser/dev/scripts/email/bouncedEmails.php

让电子邮件过滤器管道到程序工作的 3 个步骤

  1. 脚本.php:CHMOD 755
  2. 管道到程序的路径: | PHP -q public_html/脚本.php
  3. 在脚本顶部添加 #!/usr/local/bin/php -q.php在 PHP 开始标记 <?php 之前

最新更新