blob: 20d9715f264b986173eb9a59045be618f2e3221a [file] [log] [blame]
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +01001<?php
2
3declare(strict_types=1);
4
5namespace Ddeboer\Imap\Message;
6
7final class EmbeddedMessage extends AbstractMessage implements EmbeddedMessageInterface
8{
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02009 private ?Headers $headers = null;
10 private ?string $rawHeaders = null;
11 private ?string $rawMessage = null;
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010012
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010013 public function getHeaders(): Headers
14 {
15 if (null === $this->headers) {
16 $this->headers = new Headers(\imap_rfc822_parse_headers($this->getRawHeaders()));
17 }
18
19 return $this->headers;
20 }
21
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010022 public function getRawHeaders(): string
23 {
24 if (null === $this->rawHeaders) {
25 $rawHeaders = \explode("\r\n\r\n", $this->getRawMessage(), 2);
26 $this->rawHeaders = \current($rawHeaders);
27 }
28
29 return $this->rawHeaders;
30 }
31
Matthias Andreas Benkardb382b102021-01-02 15:32:21 +010032 public function getRawMessage(): string
33 {
34 if (null === $this->rawMessage) {
35 $this->rawMessage = $this->doGetContent($this->getPartNumber());
36 }
37
38 return $this->rawMessage;
39 }
40
41 /**
42 * Get content part number.
43 */
44 protected function getContentPartNumber(): string
45 {
46 $partNumber = $this->getPartNumber();
47 if (0 === \count($this->getParts())) {
48 $partNumber .= '.1';
49 }
50
51 return $partNumber;
52 }
53}