php - 使用 php 脚本的电子邮件管道来收集 TO 字段?

标签 php email piping

我想将退回的电子邮件转发到 PHP 脚本来处理它们。我正在使用。

 #!/usr/bin/php -q
 <?php

 // 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
   $from = "";
    $subject = "";
    $headers = "";
    $message = "";
    $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("/^Subject: (.*)/", $lines[$i], $matches)) {
        $subject = $matches[1];
    }
    if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
        $from = $matches[1];
    }
} else {
    // not a header, but message
    $message .= $lines[$i]."\n";
}

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

  ?>     

工作完美!但是如何收集退回邮件中的“收件人”字段?我试过只添加一个 $to 变量,但它不起作用。

任何帮助都会很棒,

谢谢,

编辑:实际上我需要在邮件正文中获取“收件人”字段。 - 从中退回的电子邮件。如何拆分邮件正文以获取特定信息?我是否应该用此人的电子邮件创建一个特殊的标题,以便更容易地获取此信息?

最佳答案

如果您可以创建自定义 header ,那将是最简单的。否则,您需要针对特定​​模式匹配您的整个 body ;如果您的正文文本可能会有所不同,则可能很难确保您始终匹配正确的文本。

自定义 header 应以 X- 开头,因此可以执行以下操作:

if (preg_match("/^X-Originally-To: (.*)/", $lines[$i], $matches)) {
    $originallyto = $matches[1];
}

但是对于 X- header ,它们是非标准的,因此最好选择一个名称,它是

  1. 通常专门用于同一目的,或
  2. 根本不可能被其他任何人使用

还有一件事你应该知道;消息中的行应始终以“\r\n”结尾,因此您可能希望拆分两个字符(而不仅仅是“\n”)以确保更一致的行为。

关于php - 使用 php 脚本的电子邮件管道来收集 TO 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9146674/

相关文章:

email - 使用 STARTTLS 从 Office365 发送电子邮件失败

R:使用管道将单个参数传递到函数中的多个位置

php - 无法使用 FPDF 将文件保存到目录

javascript - 使用 Javascript 将 PHP 变量转换为 HTML 文本框

email - 如何使用 MailKit POP3 客户端通过消息 ID 删除消息?

c - 在 C 中使用 popen() 不成功?

linux - 如何在 Linux 中对 grep 的管道输出进行子字符串化?

php - login.php 重定向到空白页面

php - 数据库选择查询困惑

c# - 如何通过 Yandex SMTP 发送电子邮件 (C# ASP.NET)