diff --git a/src/InboundEmail.php b/src/InboundEmail.php index 089bb02..0df5b06 100644 --- a/src/InboundEmail.php +++ b/src/InboundEmail.php @@ -10,7 +10,11 @@ use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; use ZBateson\MailMimeParser\Header\AddressHeader; +use ZBateson\MailMimeParser\Header\GenericHeader; use ZBateson\MailMimeParser\Header\Part\AddressPart; +use ZBateson\MailMimeParser\Header\Part\LiteralPart; +use ZBateson\MailMimeParser\Header\Part\ReceivedDomainPart; +use ZBateson\MailMimeParser\Header\ReceivedHeader; use ZBateson\MailMimeParser\Message as MimeMessage; use ZBateson\MailMimeParser\Message\Part\MessagePart; @@ -106,6 +110,11 @@ public function to(): array return $this->convertAddressHeader($this->message()->getHeader('To')); } + public function received(): array + { + return $this->convertReceivedHeaders($this->message()->getAllHeadersByName('received')); + } + /** * @return AddressPart[] */ @@ -131,6 +140,17 @@ protected function convertAddressHeader($header): array return []; } + protected function convertReceivedHeaders($headers): array + { + $parts = []; + + foreach($headers as $header){ + $parts = array_merge($header->getParts(), $parts); + } + + return $parts; + } + /** * @return MessagePart[] */ diff --git a/src/Routing/Route.php b/src/Routing/Route.php index 33e4eca..1ec2521 100644 --- a/src/Routing/Route.php +++ b/src/Routing/Route.php @@ -11,6 +11,9 @@ use Illuminate\Support\Str; use ReflectionFunction; use ZBateson\MailMimeParser\Header\Part\AddressPart; +use ZBateson\MailMimeParser\Header\Part\LiteralPart; +use ZBateson\MailMimeParser\Header\Part\ReceivedDomainPart; +use ZBateson\MailMimeParser\Header\Part\ReceivedPart; class Route { @@ -20,6 +23,7 @@ class Route const FROM = 'from'; const TO = 'to'; + const RECEIVED = 'received'; const CC = 'cc'; const BCC = 'bcc'; const SUBJECT = 'subject'; @@ -87,6 +91,9 @@ protected function gatherMatchSubjectsFromMessage(InboundEmail $message) case self::TO: return $this->convertMessageAddresses($message->to()); break; + case self::RECEIVED: + return $this->convertReceivedValues($message->received()); + break; case self::CC: return $this->convertMessageAddresses($message->cc()); break; @@ -111,6 +118,14 @@ protected function convertMessageAddresses($addresses): array })->toArray(); } + protected function convertReceivedValues($receivedParts): array + { + return Collection::make($receivedParts) + ->map(function ($ReceivedPart) { + return str_replace('>','', str_replace('<','',$ReceivedPart->getValue())); + })->toArray(); + } + public function run(InboundEmail $email) { $this->container = $this->container ?: new Container; diff --git a/src/Routing/Router.php b/src/Routing/Router.php index 390d839..cb3ad0c 100644 --- a/src/Routing/Router.php +++ b/src/Routing/Router.php @@ -41,6 +41,11 @@ public function to(string $pattern, $action): Route return $this->addRoute(Route::TO, $pattern, $action); } + public function received(string $pattern, $action): Route + { + return $this->addRoute(Route::RECEIVED, $pattern, $action); + } + public function cc(string $pattern, $action): Route { return $this->addRoute(Route::CC, $pattern, $action);