Как мне извлечь контент из zend mail imap? - PullRequest
0 голосов
/ 19 мая 2011

Я пытаюсь написать скрипт, который загружает всю почту в определенной папке без пользовательского флага, давайте пока вызовем флаг $ aNiceFlag; после того, как я получил письмо, я хочу пометить его с помощью $ aNiceFlag. Однако, прежде чем заняться проблемой флагов, у меня есть проблема с извлечением необходимого контента из почты прямо сейчас.

Это информация, которая мне нужна:

  • Отправитель (адрес электронной почты и имя, если возможно)
  • Тема
  • Приемник
  • Простое текстовое тело (если доступен только html, я постараюсь преобразовать его из html в обычный текст)
  • Время отправлено

Я легко могу получить предмет, используя $mailObject->subject. Я смотрю на Документацию Zend , но это немного сбивает с толку.

Вот мой код прямо сейчас, я не должен выводить содержимое, но это только сейчас во время тестирования:

$this->gOauth = new GoogleOauth();
$this->gOauth->connect_imap();
$storage = new Zend_Mail_Storage_Imap(&$this->gOauth->gImap);
$storage->selectFolder($this->label);
foreach($storage as $mail){
    echo $mail->subject();
    echo strip_tags($mail->getContent());
}

Я получаю доступ к почте с помощью Google oAuth. $this->label - это папка, которую я хочу получить. Пока все довольно просто, но перед тем, как усложнить задачу, я хочу выяснить основы, такие как подходящий способ выделения всех перечисленных выше данных в отдельные ключи в массиве.

1 Ответ

5 голосов
/ 19 мая 2011

Вы можете легко получить заголовки для отправителя, получателя и даты, используя ту же технику, которую вы использовали для предмета, однако фактическое текстовое тело немного сложнее, вот пример кода, который будет делать то, что вы хотите

    $this->gOauth = new GoogleOauth();
    $this->gOauth->connect_imap();
    $storage = new Zend_Mail_Storage_Imap(&$this->gOauth->gImap);
    $storage->selectFolder($this->label);
    // output first text/plain part
    $foundPart = null;
    foreach($storage as $mail){
        echo '----------------------<br />'."\n";
        echo "From: ".utf8_encode($mail->from)."<br />\n";
        echo "To: ".utf8_encode(htmlentities($mail->to))."<br />\n";
        echo "Time: ".utf8_encode(htmlentities(date("Y-m-d H:s" ,strtotime($mail->date))))."<br />\n";
        echo "Subject: ".utf8_encode($mail->subject)."<br />\n";

        foreach (new RecursiveIteratorIterator($mail) as $part) {
            try {
                if (strtok($part->contentType, ';') == 'text/plain') {
                    $foundPart = $part;
                    break;
                }
            } catch (Zend_Mail_Exception $e) {
                // ignore
            }
        }
        if (!$foundPart) {
            echo "no plain text part found <br /><br /><br /><br />\n\n\n";
        } else {
            echo "plain text part: <br />" .
                    str_replace("\n", "\n<br />", trim(utf8_encode(quoted_printable_decode(strip_tags($foundPart)))))
                ." <br /><br /><br /><br />\n\n\n";
        }
    }
...