电子邮件管道到 PHP 脚本并转发到另一封电子邮件

Posted

技术标签:

【中文标题】电子邮件管道到 PHP 脚本并转发到另一封电子邮件【英文标题】:email pipe to PHP script and forward to another email 【发布时间】:2016-03-30 05:50:47 【问题描述】:

我正在尝试编写一个脚本,该脚本将用于将电子邮件通过管道传送到它,然后转发到另一个具有不同“发件人”字段的电子邮件地址

#!/usr/local/bin/php56 -q
<?php
$fd = fopen("php://stdin", "r");
$message = "";
while (!feof($fd)) 
$message .= fread($fd, 1024);

fclose($fd); 

//split the string into array of strings, each of the string represents a single line, received
$lines = explode("\n", $message);

// initialize variable which will assigned later on
$from = emailFrom@example.com;
$subject = "";
$headers = "";
$message = "";
$is_header= true;

//loop through each line
for ($i=0; $i < count($lines); $i++) 
if ($is_header) 
// hear information. instead of main message body, all other information are here.
$headers .= $lines[$i]."\n";

// Split out the subject portion
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) 
$subject = $matches[1];

//Split out the sender information portion
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) 
$from = $matches[1];

 else 
// content/main message body information
$message .= $lines[$i]."\n";

if (trim($lines[$i])=="") 
// empty line, header section has ended
$is_header = false;



mail( "emailTo@example.com", $subject,$message, $from );

?>

此脚本正在让我们退回电子邮件,并显示“本地交付失败”的传递失败消息。

我做错了什么?

【问题讨论】:

【参考方案1】:

您需要验证它是否正确解析传入的消息。在您的 mail() 命令之后添加此行以验证脚本的输出:

echo "Subject:".$subject."\nFrom:".$from."\nMessage:".$message;

然后从命令行向脚本传递一封测试电子邮件并观察屏幕。某些内容可能无法正确解析。

【讨论】:

以上是关于电子邮件管道到 PHP 脚本并转发到另一封电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

PHP Mailer --- 回复:--- Return-path --- SetFrom

如何在 PHP 中更改管道转发的电子邮件“发件人”和“收件人”部分

boto3 EC2 脚本电子邮件:所有状态检查的一封电子邮件

通过管道将电子邮件发送到 python 脚本

转发入站电子邮件 sendgrid

使用 PHP 将入站电子邮件附件保存到磁盘