Так что я пытаюсь получить 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'.