nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							385 lines
						
					
					
						
							14 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							385 lines
						
					
					
						
							14 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of the Symfony package. | |
|  * | |
|  * (c) Fabien Potencier <fabien@symfony.com> | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Symfony\Component\Mime\Tests; | |
| 
 | |
| use PHPUnit\Framework\TestCase; | |
| use Symfony\Component\Mime\Address; | |
| use Symfony\Component\Mime\Email; | |
| use Symfony\Component\Mime\NamedAddress; | |
| use Symfony\Component\Mime\Part\DataPart; | |
| use Symfony\Component\Mime\Part\Multipart\AlternativePart; | |
| use Symfony\Component\Mime\Part\Multipart\MixedPart; | |
| use Symfony\Component\Mime\Part\Multipart\RelatedPart; | |
| use Symfony\Component\Mime\Part\TextPart; | |
| 
 | |
| class EmailTest extends TestCase | |
| { | |
|     public function testSubject() | |
|     { | |
|         $e = new Email(); | |
|         $e->subject('Subject'); | |
|         $this->assertEquals('Subject', $e->getSubject()); | |
|     } | |
| 
 | |
|     public function testDate() | |
|     { | |
|         $e = new Email(); | |
|         $e->date($d = new \DateTimeImmutable()); | |
|         $this->assertSame($d, $e->getDate()); | |
|     } | |
| 
 | |
|     public function testReturnPath() | |
|     { | |
|         $e = new Email(); | |
|         $e->returnPath('fabien@symfony.com'); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $e->getReturnPath()); | |
|     } | |
| 
 | |
|     public function testSender() | |
|     { | |
|         $e = new Email(); | |
|         $e->sender('fabien@symfony.com'); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $e->getSender()); | |
| 
 | |
|         $e->sender($fabien = new Address('fabien@symfony.com')); | |
|         $this->assertSame($fabien, $e->getSender()); | |
|     } | |
| 
 | |
|     public function testFrom() | |
|     { | |
|         $e = new Email(); | |
|         $helene = new Address('helene@symfony.com'); | |
|         $thomas = new NamedAddress('thomas@symfony.com', 'Thomas'); | |
|         $caramel = new Address('caramel@symfony.com'); | |
| 
 | |
|         $this->assertSame($e, $e->from('fabien@symfony.com', $helene, $thomas)); | |
|         $v = $e->getFrom(); | |
|         $this->assertCount(3, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
| 
 | |
|         $this->assertSame($e, $e->addFrom('lucas@symfony.com', $caramel)); | |
|         $v = $e->getFrom(); | |
|         $this->assertCount(5, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
|         $this->assertEquals(new Address('lucas@symfony.com'), $v[3]); | |
|         $this->assertSame($caramel, $v[4]); | |
| 
 | |
|         $e = new Email(); | |
|         $e->addFrom('lucas@symfony.com', $caramel); | |
|         $this->assertCount(2, $e->getFrom()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->from('lucas@symfony.com'); | |
|         $e->from($caramel); | |
|         $this->assertSame([$caramel], $e->getFrom()); | |
|     } | |
| 
 | |
|     public function testReplyTo() | |
|     { | |
|         $e = new Email(); | |
|         $helene = new Address('helene@symfony.com'); | |
|         $thomas = new NamedAddress('thomas@symfony.com', 'Thomas'); | |
|         $caramel = new Address('caramel@symfony.com'); | |
| 
 | |
|         $this->assertSame($e, $e->replyTo('fabien@symfony.com', $helene, $thomas)); | |
|         $v = $e->getReplyTo(); | |
|         $this->assertCount(3, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
| 
 | |
|         $this->assertSame($e, $e->addReplyTo('lucas@symfony.com', $caramel)); | |
|         $v = $e->getReplyTo(); | |
|         $this->assertCount(5, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
|         $this->assertEquals(new Address('lucas@symfony.com'), $v[3]); | |
|         $this->assertSame($caramel, $v[4]); | |
| 
 | |
|         $e = new Email(); | |
|         $e->addReplyTo('lucas@symfony.com', $caramel); | |
|         $this->assertCount(2, $e->getReplyTo()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->replyTo('lucas@symfony.com'); | |
|         $e->replyTo($caramel); | |
|         $this->assertSame([$caramel], $e->getReplyTo()); | |
|     } | |
| 
 | |
|     public function testTo() | |
|     { | |
|         $e = new Email(); | |
|         $helene = new Address('helene@symfony.com'); | |
|         $thomas = new NamedAddress('thomas@symfony.com', 'Thomas'); | |
|         $caramel = new Address('caramel@symfony.com'); | |
| 
 | |
|         $this->assertSame($e, $e->to('fabien@symfony.com', $helene, $thomas)); | |
|         $v = $e->getTo(); | |
|         $this->assertCount(3, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
| 
 | |
|         $this->assertSame($e, $e->addTo('lucas@symfony.com', $caramel)); | |
|         $v = $e->getTo(); | |
|         $this->assertCount(5, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
|         $this->assertEquals(new Address('lucas@symfony.com'), $v[3]); | |
|         $this->assertSame($caramel, $v[4]); | |
| 
 | |
|         $e = new Email(); | |
|         $e->addTo('lucas@symfony.com', $caramel); | |
|         $this->assertCount(2, $e->getTo()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->to('lucas@symfony.com'); | |
|         $e->to($caramel); | |
|         $this->assertSame([$caramel], $e->getTo()); | |
|     } | |
| 
 | |
|     public function testCc() | |
|     { | |
|         $e = new Email(); | |
|         $helene = new Address('helene@symfony.com'); | |
|         $thomas = new NamedAddress('thomas@symfony.com', 'Thomas'); | |
|         $caramel = new Address('caramel@symfony.com'); | |
| 
 | |
|         $this->assertSame($e, $e->cc('fabien@symfony.com', $helene, $thomas)); | |
|         $v = $e->getCc(); | |
|         $this->assertCount(3, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
| 
 | |
|         $this->assertSame($e, $e->addCc('lucas@symfony.com', $caramel)); | |
|         $v = $e->getCc(); | |
|         $this->assertCount(5, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
|         $this->assertEquals(new Address('lucas@symfony.com'), $v[3]); | |
|         $this->assertSame($caramel, $v[4]); | |
| 
 | |
|         $e = new Email(); | |
|         $e->addCc('lucas@symfony.com', $caramel); | |
|         $this->assertCount(2, $e->getCc()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->cc('lucas@symfony.com'); | |
|         $e->cc($caramel); | |
|         $this->assertSame([$caramel], $e->getCc()); | |
|     } | |
| 
 | |
|     public function testBcc() | |
|     { | |
|         $e = new Email(); | |
|         $helene = new Address('helene@symfony.com'); | |
|         $thomas = new NamedAddress('thomas@symfony.com', 'Thomas'); | |
|         $caramel = new Address('caramel@symfony.com'); | |
| 
 | |
|         $this->assertSame($e, $e->bcc('fabien@symfony.com', $helene, $thomas)); | |
|         $v = $e->getBcc(); | |
|         $this->assertCount(3, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
| 
 | |
|         $this->assertSame($e, $e->addBcc('lucas@symfony.com', $caramel)); | |
|         $v = $e->getBcc(); | |
|         $this->assertCount(5, $v); | |
|         $this->assertEquals(new Address('fabien@symfony.com'), $v[0]); | |
|         $this->assertSame($helene, $v[1]); | |
|         $this->assertSame($thomas, $v[2]); | |
|         $this->assertEquals(new Address('lucas@symfony.com'), $v[3]); | |
|         $this->assertSame($caramel, $v[4]); | |
| 
 | |
|         $e = new Email(); | |
|         $e->addBcc('lucas@symfony.com', $caramel); | |
|         $this->assertCount(2, $e->getBcc()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->bcc('lucas@symfony.com'); | |
|         $e->bcc($caramel); | |
|         $this->assertSame([$caramel], $e->getBcc()); | |
|     } | |
| 
 | |
|     public function testPriority() | |
|     { | |
|         $e = new Email(); | |
|         $this->assertEquals(3, $e->getPriority()); | |
| 
 | |
|         $e->priority(1); | |
|         $this->assertEquals(1, $e->getPriority()); | |
|         $e->priority(10); | |
|         $this->assertEquals(5, $e->getPriority()); | |
|         $e->priority(-10); | |
|         $this->assertEquals(1, $e->getPriority()); | |
|     } | |
| 
 | |
|     public function testGenerateBodyThrowsWhenEmptyBody() | |
|     { | |
|         $this->expectException(\LogicException::class); | |
|         (new Email())->getBody(); | |
|     } | |
| 
 | |
|     public function testGetBody() | |
|     { | |
|         $e = new Email(); | |
|         $e->setBody($text = new TextPart('text content')); | |
|         $this->assertEquals($text, $e->getBody()); | |
|     } | |
| 
 | |
|     public function testGenerateBody() | |
|     { | |
|         $text = new TextPart('text content'); | |
|         $html = new TextPart('html content', 'utf-8', 'html'); | |
|         $att = new DataPart($file = fopen(__DIR__.'/Fixtures/mimetypes/test', 'r')); | |
|         $img = new DataPart($image = fopen(__DIR__.'/Fixtures/mimetypes/test.gif', 'r'), 'test.gif'); | |
| 
 | |
|         $e = new Email(); | |
|         $e->text('text content'); | |
|         $this->assertEquals($text, $e->getBody()); | |
|         $this->assertEquals('text content', $e->getTextBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html('html content'); | |
|         $this->assertEquals($html, $e->getBody()); | |
|         $this->assertEquals('html content', $e->getHtmlBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html('html content'); | |
|         $e->text('text content'); | |
|         $this->assertEquals(new AlternativePart($text, $html), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html('html content', 'iso-8859-1'); | |
|         $e->text('text content', 'iso-8859-1'); | |
|         $this->assertEquals('iso-8859-1', $e->getTextCharset()); | |
|         $this->assertEquals('iso-8859-1', $e->getHtmlCharset()); | |
|         $this->assertEquals(new AlternativePart(new TextPart('text content', 'iso-8859-1'), new TextPart('html content', 'iso-8859-1', 'html')), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->attach($file); | |
|         $e->text('text content'); | |
|         $this->assertEquals(new MixedPart($text, $att), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->attach($file); | |
|         $e->html('html content'); | |
|         $this->assertEquals(new MixedPart($html, $att), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html('html content'); | |
|         $e->text('text content'); | |
|         $e->attach($file); | |
|         $this->assertEquals(new MixedPart(new AlternativePart($text, $html), $att), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html('html content'); | |
|         $e->text('text content'); | |
|         $e->attach($file); | |
|         $e->attach($image, 'test.gif'); | |
|         $this->assertEquals(new MixedPart(new AlternativePart($text, $html), $att, $img), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->text('text content'); | |
|         $e->attach($file); | |
|         $e->attach($image, 'test.gif'); | |
|         $this->assertEquals(new MixedPart($text, $att, $img), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html($content = 'html content <img src="test.gif">'); | |
|         $e->text('text content'); | |
|         $e->attach($file); | |
|         $e->attach($image, 'test.gif'); | |
|         $fullhtml = new TextPart($content, 'utf-8', 'html'); | |
|         $this->assertEquals(new MixedPart(new AlternativePart($text, $fullhtml), $att, $img), $e->getBody()); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html($content = 'html content <img src="cid:test.gif">'); | |
|         $e->text('text content'); | |
|         $e->attach($file); | |
|         $e->attach($image, 'test.gif'); | |
|         $fullhtml = new TextPart($content, 'utf-8', 'html'); | |
|         $inlinedimg = (new DataPart($image, 'test.gif'))->asInline(); | |
|         $body = $e->getBody(); | |
|         $this->assertInstanceOf(MixedPart::class, $body); | |
|         $this->assertCount(2, $related = $body->getParts()); | |
|         $this->assertInstanceOf(RelatedPart::class, $related[0]); | |
|         $this->assertEquals($att, $related[1]); | |
|         $this->assertCount(2, $parts = $related[0]->getParts()); | |
|         $this->assertInstanceOf(AlternativePart::class, $parts[0]); | |
|         $generatedHtml = $parts[0]->getParts()[1]; | |
|         $this->assertContains('cid:'.$parts[1]->getContentId(), $generatedHtml->getBody()); | |
| 
 | |
|         $content = 'html content <img src="cid:test.gif">'; | |
|         $r = fopen('php://memory', 'r+', false); | |
|         fwrite($r, $content); | |
|         rewind($r); | |
| 
 | |
|         $e = new Email(); | |
|         $e->html($r); | |
|         // embedding the same image twice results in one image only in the email | |
|         $e->embed($image, 'test.gif'); | |
|         $e->embed($image, 'test.gif'); | |
|         $body = $e->getBody(); | |
|         $this->assertInstanceOf(RelatedPart::class, $body); | |
|         // 2 parts only, not 3 (text + embedded image once) | |
|         $this->assertCount(2, $parts = $body->getParts()); | |
|         $this->assertStringMatchesFormat('html content <img src=3D"cid:%s@symfony">', $parts[0]->bodyToString()); | |
|     } | |
| 
 | |
|     public function testAttachments() | |
|     { | |
|         $contents = file_get_contents($name = __DIR__.'/Fixtures/mimetypes/test', 'r'); | |
|         $att = new DataPart($file = fopen($name, 'r'), 'test'); | |
|         $inline = (new DataPart($contents, 'test'))->asInline(); | |
|         $e = new Email(); | |
|         $e->attach($file, 'test'); | |
|         $e->embed($contents, 'test'); | |
|         $this->assertEquals([$att, $inline], $e->getAttachments()); | |
| 
 | |
|         $att = DataPart::fromPath($name, 'test'); | |
|         $inline = DataPart::fromPath($name, 'test')->asInline(); | |
|         $e = new Email(); | |
|         $e->attachFromPath($name); | |
|         $e->embedFromPath($name); | |
|         $this->assertEquals([$att->bodyToString(), $inline->bodyToString()], array_map(function (DataPart $a) { return $a->bodyToString(); }, $e->getAttachments())); | |
|         $this->assertEquals([$att->getPreparedHeaders(), $inline->getPreparedHeaders()], array_map(function (DataPart $a) { return $a->getPreparedHeaders(); }, $e->getAttachments())); | |
|     } | |
| 
 | |
|     public function testSerialize() | |
|     { | |
|         $r = fopen('php://memory', 'r+', false); | |
|         fwrite($r, 'Text content'); | |
|         rewind($r); | |
| 
 | |
|         $e = new Email(); | |
|         $e->from('fabien@symfony.com'); | |
|         $e->text($r); | |
|         $e->html($r); | |
|         $contents = file_get_contents($name = __DIR__.'/Fixtures/mimetypes/test', 'r'); | |
|         $file = fopen($name, 'r'); | |
|         $e->attach($file, 'test'); | |
|         $expected = clone $e; | |
|         $n = unserialize(serialize($e)); | |
|         $this->assertEquals($expected->getHeaders(), $n->getHeaders()); | |
|         $this->assertEquals($e->getBody(), $n->getBody()); | |
|     } | |
| }
 | |
| 
 |