Dashboard sipadu mbip
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\Mime\Tests;
  11. use PHPUnit\Framework\TestCase;
  12. use Symfony\Component\Mime\Address;
  13. use Symfony\Component\Mime\Header\Headers;
  14. use Symfony\Component\Mime\Header\MailboxListHeader;
  15. use Symfony\Component\Mime\Header\UnstructuredHeader;
  16. use Symfony\Component\Mime\Message;
  17. use Symfony\Component\Mime\NamedAddress;
  18. use Symfony\Component\Mime\Part\TextPart;
  19. class MessageTest extends TestCase
  20. {
  21. public function testConstruct()
  22. {
  23. $m = new Message();
  24. $this->assertNull($m->getBody());
  25. $this->assertEquals(new Headers(), $m->getHeaders());
  26. $m = new Message($h = (new Headers())->addDateHeader('Date', new \DateTime()), $b = new TextPart('content'));
  27. $this->assertSame($b, $m->getBody());
  28. $this->assertEquals($h, $m->getHeaders());
  29. $m = new Message();
  30. $m->setBody($b);
  31. $m->setHeaders($h);
  32. $this->assertSame($b, $m->getBody());
  33. $this->assertSame($h, $m->getHeaders());
  34. }
  35. public function testGetPreparedHeadersThrowsWhenNoFrom()
  36. {
  37. $this->expectException(\LogicException::class);
  38. (new Message())->getPreparedHeaders();
  39. }
  40. public function testGetPreparedHeadersCloneHeaders()
  41. {
  42. $message = new Message();
  43. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  44. $this->assertNotSame($message->getPreparedHeaders(), $message->getHeaders());
  45. }
  46. public function testGetPreparedHeadersSetRequiredHeaders()
  47. {
  48. $message = new Message();
  49. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  50. $headers = $message->getPreparedHeaders();
  51. $this->assertTrue($headers->has('MIME-Version'));
  52. $this->assertTrue($headers->has('Message-ID'));
  53. $this->assertTrue($headers->has('Date'));
  54. $this->assertFalse($headers->has('Bcc'));
  55. }
  56. public function testGetPreparedHeaders()
  57. {
  58. $message = new Message();
  59. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  60. $h = $message->getPreparedHeaders();
  61. $this->assertCount(4, iterator_to_array($h->all()));
  62. $this->assertEquals(new MailboxListHeader('From', [new Address('fabien@symfony.com')]), $h->get('From'));
  63. $this->assertEquals(new UnstructuredHeader('MIME-Version', '1.0'), $h->get('mime-version'));
  64. $this->assertTrue($h->has('Message-Id'));
  65. $this->assertTrue($h->has('Date'));
  66. $message = new Message();
  67. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  68. $message->getHeaders()->addDateHeader('Date', $n = new \DateTimeImmutable());
  69. $this->assertEquals($n, $message->getPreparedHeaders()->get('Date')->getDateTime());
  70. $message = new Message();
  71. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  72. $message->getHeaders()->addMailboxListHeader('Bcc', ['fabien@symfony.com']);
  73. $this->assertNull($message->getPreparedHeaders()->get('Bcc'));
  74. }
  75. public function testGetPreparedHeadersWithNoFrom()
  76. {
  77. $this->expectException(\LogicException::class);
  78. (new Message())->getPreparedHeaders();
  79. }
  80. public function testGetPreparedHeadersWithNamedFrom()
  81. {
  82. $message = new Message();
  83. $message->getHeaders()->addMailboxListHeader('From', [new NamedAddress('fabien@symfony.com', 'Fabien')]);
  84. $h = $message->getPreparedHeaders();
  85. $this->assertEquals(new MailboxListHeader('From', [new NamedAddress('fabien@symfony.com', 'Fabien')]), $h->get('From'));
  86. $this->assertTrue($h->has('Message-Id'));
  87. }
  88. public function testGetPreparedHeadersHasSenderWhenNeeded()
  89. {
  90. $message = new Message();
  91. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  92. $this->assertNull($message->getPreparedHeaders()->get('Sender'));
  93. $message = new Message();
  94. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com', 'lucas@symfony.com']);
  95. $this->assertEquals('fabien@symfony.com', $message->getPreparedHeaders()->get('Sender')->getAddress()->getAddress());
  96. $message = new Message();
  97. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com', 'lucas@symfony.com']);
  98. $message->getHeaders()->addMailboxHeader('Sender', 'thomas@symfony.com');
  99. $this->assertEquals('thomas@symfony.com', $message->getPreparedHeaders()->get('Sender')->getAddress()->getAddress());
  100. }
  101. public function testToString()
  102. {
  103. $message = new Message();
  104. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  105. $expected = <<<EOF
  106. From: fabien@symfony.com
  107. MIME-Version: 1.0
  108. Date: %s
  109. Message-ID: <%s@symfony.com>
  110. Content-Type: text/plain; charset=utf-8
  111. Content-Transfer-Encoding: quoted-printable
  112. EOF;
  113. $this->assertStringMatchesFormat($expected, str_replace("\r\n", "\n", $message->toString()));
  114. $this->assertStringMatchesFormat($expected, str_replace("\r\n", "\n", implode('', iterator_to_array($message->toIterable(), false))));
  115. $message = new Message(null, new TextPart('content'));
  116. $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
  117. $expected = <<<EOF
  118. From: fabien@symfony.com
  119. MIME-Version: 1.0
  120. Date: %s
  121. Message-ID: <%s@symfony.com>
  122. Content-Type: text/plain; charset=utf-8
  123. Content-Transfer-Encoding: quoted-printable
  124. content
  125. EOF;
  126. $this->assertStringMatchesFormat($expected, str_replace("\r\n", "\n", $message->toString()));
  127. $this->assertStringMatchesFormat($expected, str_replace("\r\n", "\n", implode('', iterator_to_array($message->toIterable(), false))));
  128. }
  129. }