Использование Fetch (утомительно) для получения электронной почты в / из - PullRequest
0 голосов
/ 24 января 2019

Так что я пытаюсь получить Fetch (утомительно: https://github.com/tedious/Fetch)set и работает на локальном сервере, и все идет гладко. Я могу получить тело просто отлично, используя: $body = $message->getHtmlBody();, но я немного запутался в том, как на самом деле получить to / from. Я думал, что могу получить его, просто используя: $sentFrom = $message->getAddresses('from'), но я не получаю правильных результатов. Я посмотрел в файле Message.php, и есть функция named getAddresses ():

    /**
 * This function returns either an array of email addresses and names or, optionally, a string that can be used in
 * mail headers.
 *
 * @param  string            $type     Should be 'to', 'cc', 'bcc', 'from', 'sender', or 'reply-to'.
 * @param  bool              $asString
 * @return array|string|bool
 */
public function getAddresses($type, $asString = false)
{
    $type = ( $type == 'reply-to' ) ? 'replyTo' : $type;
    $addressTypes = array('to', 'cc', 'bcc', 'from', 'sender', 'replyTo');

    if (!in_array($type, $addressTypes) || !isset($this->$type) || count($this->$type) < 1)
        return false;

    if (!$asString) {
        if ($type == 'from')
            return $this->from[0];
        elseif ($type == 'sender')
            return $this->sender[0];

        return $this->$type;
    } else {
        $outputString = '';
        foreach ($this->$type as $address) {
            if (isset($set))
                $outputString .= ', ';
            if (!isset($set))
                $set = true;

            $outputString .= isset($address['name']) ?
                $address['name'] . ' <' . $address['address'] . '>'
                : $address['address'];
        }

        return $outputString;
    }
}

Я, вероятно, только что совершил глупую ошибку, но сейчас понятия не имею. Любое понимание было бы весьма полезно.

Так что в настоящее время я просто перебираю сообщения и выводю тему сообщения, от, до и тело. Например:

$server = new Server('imap.myserver.com', 993);
$server->setAuthentication('test@domain.com', 'mypassword');

$messages = $server->getMessages();

$i = 0;
$output = "";

foreach($messages as $message) {
    $html = true;
    $subject = $message->getSubject(); //get the subject of the email
    $sentFrom = $message->getAddresses('from'); // who sent the email
    $sentTo = $message->getAddresses('to'); //who is the email to
    $body = $message->getHtmlBody();

    //construct the email with a wrapper for little nicer look
    $output .= "<div class=\"email\">";
    $output .= "<div class=\"header\">";
    $output .= "<p>{$subject}</p>";
    $output .= "<p>{$sentFrom}</p>";
    $output .= "<p>{$sentTo}</p>";
    $output .= "</div>";
    $output .= "<div class=\"body\">";
    $output .= $body;
    $output .= "</div>";
    $output .= "</div>";
}

echo $output;
if (++$i = 10) break;

Если все работает правильно, когда я обновляю страницу, скрипт подключается к серверу электронной почты, проверяет электронные письма и собирает тему, адрес и текст всех электронных писем в foreach. Он также выведет электронные письма на экран. К сожалению, только 2 переменные, которые на самом деле не работают, это $ sentTo и $ sentFrom. Наверное, я просто сбит с толку, почему мне не возвращают адреса, используя $sentTo = $message->getAddresses('to');, когда функция в Message.php говорит:

 * @param  string    $type     Should be 'to', 'cc', 'bcc', 'from', 'sender', or 'reply-to'.

1 Ответ

0 голосов
/ 24 января 2019

Итак, углубившись в это, я нашел решение. Похоже, что однажды я добавил в:

$arrayedTo = print_r($sentTo);
$arrayedFrom = print_r($sentFrom);

Я получил следующее

Array
(
    [0] => Array
        (
            [address] => firstlast@mydomain.com
            [name] => My Name
        )

)

Array
(
    [address] => firstlast@sentfromdomain.com
    [name] => Name of Sender
)

Поэтому в цикле foreach мне пришлось сделать следующее, чтобы получить правильные результаты. Наверное, я просто упустил из виду тот факт, что он возвращал массив.

Sent From Address: {$sentFrom['address']}
Sent To Address: {$sentTo[0]['address']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...