Отправить по электронной почте с PHP-скриптом, чтобы собрать поле TO? - PullRequest
3 голосов
/ 05 февраля 2012

Я хочу переслать мои отклоненные письма в скрипт 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" в теле сообщения. - Письмо, от которого оно пришло. Как мне отделить тело сообщения, чтобы получить конкретную информацию? Должен ли я создать специальный заголовок с электронной почтой этого человека, чтобы было легче получить эту информацию?

1 Ответ

1 голос
/ 05 февраля 2012

Если вы можете создать собственный заголовок, это будет проще всего. В противном случае вам нужно сопоставить все ваше тело для определенного шаблона; и если ваш основной текст может отличаться, может быть трудно убедиться, что вы всегда соответствуете правильному тексту.

Пользовательские заголовки должны начинаться с X-, поэтому, возможно, сделайте что-то вроде:

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

Но с X-заголовками они нестандартны, поэтому лучше выбрать имя, которое либо

  1. Обычно используется исключительно для той же цели, или
  2. Скорее всего, не будет использоваться кем-либо еще

Еще одна вещь, о которой вы должны знать; строки в сообщении всегда должны заканчиваться на "\ r \ n", поэтому вы можете разделить их на оба символа (вместо просто "\ n"), чтобы обеспечить более согласованное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...