php 到脚本的电子邮件管道工作正常,但仍返回退回邮件

gxwragnw  于 2023-01-29  发布在  PHP
关注(0)|答案(4)|浏览(89)

下面是我用于拦截的PHP脚本:

#!/usr/local/bin/php -q
<?php
//Listen to incoming e-mails
$sock = fopen("php://stdin", 'r');
$email = '';

//Read e-mail into buffer
while (!feof($sock))
{
    $email .= fread($sock, 1024);
}

//Close socket
fclose($sock);

emailPoster('email@address.com', "message");

function emailPoster( $to, $email )
{
    $subject = "Email Intercepted";
    $body = $message;
    $headers    = "To: {$to}\r\n";
    $headers    .= "From: noreply@example.com\r\n";
    $headers    .= "Subject: {$subject}\r\n";
    $headers    .= "Reply-To: noreply@example.com\r\n";
    $headers    .= "Return-Path: noreply@example.com\r\n";
    $headers    .= "MIME-Version: 1.0\r\n";
    $headers    .= "Date: " . date("r") . "\r\n";
    $headers    .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $sender     = '-fnoreply@example.com';
    if (mail($to, $subject, $body, $headers, $sender) ){
        echo("<p>Message successfully sent!</p>");
    } else {
        echo("<p>Message delivery failed...</p>");
    }
}
?>

以及我在cPanel中使用的管道命令:
usr/local/bin/php -q /public_html/[mywebsite]/email/intercept.php
当我向适当的地址发送电子邮件时,它确实会处理intercept.php脚本,但也会返回一个反弹错误。
有什么想法吗?

mctunoxg

mctunoxg1#

如果你用管道发送电子邮件到php脚本,你不能在你脚本中使用“ECHO”或其他输出命令。2每个输出命令都会出错。3同时删除文件末尾的“?〉”。4这个标签后面的每个字符都会产生一个输出头并出错。

vcirk6k6

vcirk6k62#

我将它写入一个文件而不是echo语句。请确保目录中的写权限设置正确。

xghobddn

xghobddn3#

您始终可以输入:

return NULL;

在你的PHP文件的末尾停止任何返回消息,这将阻止脚本反弹。

gojuced7

gojuced74#

如果在脚本中调用CURL,则需要选中以下选项:

  • CURLOPT_VERBOSE:必须为false,因为如果为true,它将生成绕过所有其他停止尝试的输出。
  • CURLOPT_HEADER:如果设置为true,则可能会产生问题。需要对您的方案进行测试。

CURL选项文档:https://www.php.net/manual/en/function.curl-setopt.php
设置CURL选项的代码如下:

curl_setopt($c, CURLOPT_VERBOSE, false);
curl_setopt($c, CURLOPT_HEADER, 0);

这是对以下项目的补充:

  • 使用#!/usr/bin/php -q启动脚本
  • 使用以下命令禁用所有调试输出:error_reporting(E_ALL ^ E_DEPRECATED ^ E_WARNING ^ E_NOTICE);
  • 删除脚本底部的?>以确保没有意外输出。
  • Return NULL;结束脚本,以确保不返回任何内容。

脚本顶部

#!/usr/bin/php -q
<?php
error_reporting(E_ALL ^ E_DEPRECATED ^ E_WARNING ^ E_NOTICE);
// The rest of your script follows...

脚本结束

return null;

相关问题