gmarche/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest...

1251 lines
45 KiB
PHP

<?php
class Swift_Mime_SimpleMessageAcceptanceTest extends \PHPUnit\Framework\TestCase
{
protected function setUp()
{
Swift_Preferences::getInstance()->setCharset(null); //TODO: Test with the charset defined
}
public function testBasicHeaders()
{
/* -- RFC 2822, 3.6.
*/
$message = $this->createMessage();
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString(),
'%s: Only required headers, and non-empty headers should be displayed'
);
}
public function testSubjectIsDisplayedIfSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testDateCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$id = $message->getId();
$date = new DateTimeImmutable();
$message->setDate($date);
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMessageIdCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setId('foo@bar');
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <foo@bar>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testContentTypeCanBeChanged()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setContentType('text/html');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/html'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testCharsetCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setContentType('text/html');
$message->setCharset('iso-8859-1');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/html; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testFormatCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFormat('flowed');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain; format=flowed'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testEncoderCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setContentType('text/html');
$message->setEncoder(
new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')
);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/html'."\r\n".
'Content-Transfer-Encoding: 7bit'."\r\n",
$message->toString()
);
}
public function testFromAddressCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom('chris.corbyn@swiftmailer.org');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: chris.corbyn@swiftmailer.org'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testFromAddressCanBeSetWithName()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris Corbyn']);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMultipleFromAddressesCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn',
'mark@swiftmailer.org',
]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>, mark@swiftmailer.org'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testReturnPathAddressCanBeSet()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testEmptyReturnPathHeaderCanBeUsed()
{
$message = $this->createMessage();
$message->setReturnPath('');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Return-Path: <>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testSenderCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setSender('chris.corbyn@swiftmailer.org');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Sender: chris.corbyn@swiftmailer.org'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testSenderCanBeSetWithName()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setSender(['chris.corbyn@swiftmailer.org' => 'Chris']);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Sender: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: '."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testReplyToCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo(['chris@w3style.co.uk' => 'Myself']);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMultipleReplyAddressCanBeUsed()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testToAddressCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo('mark@swiftmailer.org');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMultipleToAddressesCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo([
'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn',
]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org, Chris Corbyn <chris@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testCcAddressCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo([
'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn',
]);
$message->setCc('john@some-site.com');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org, Chris Corbyn <chris@swiftmailer.org>'."\r\n".
'Cc: john@some-site.com'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMultipleCcAddressesCanBeSet()
{
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo([
'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn',
]);
$message->setCc([
'john@some-site.com' => 'John West',
'fred@another-site.co.uk' => 'Big Fred',
]);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org, Chris Corbyn <chris@swiftmailer.org>'."\r\n".
'Cc: John West <john@some-site.com>, Big Fred <fred@another-site.co.uk>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testBccAddressCanBeSet()
{
//Obviously Transports need to setBcc(array()) and send to each Bcc recipient
// separately in accordance with RFC 2822/2821
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo([
'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn',
]);
$message->setCc([
'john@some-site.com' => 'John West',
'fred@another-site.co.uk' => 'Big Fred',
]);
$message->setBcc('x@alphabet.tld');
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org, Chris Corbyn <chris@swiftmailer.org>'."\r\n".
'Cc: John West <john@some-site.com>, Big Fred <fred@another-site.co.uk>'."\r\n".
'Bcc: x@alphabet.tld'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testMultipleBccAddressesCanBeSet()
{
//Obviously Transports need to setBcc(array()) and send to each Bcc recipient
// separately in accordance with RFC 2822/2821
$message = $this->createMessage();
$message->setSubject('just a test subject');
$message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']);
$message->setReplyTo([
'chris@w3style.co.uk' => 'Myself',
'my.other@address.com' => 'Me',
]);
$message->setTo([
'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn',
]);
$message->setCc([
'john@some-site.com' => 'John West',
'fred@another-site.co.uk' => 'Big Fred',
]);
$message->setBcc(['x@alphabet.tld', 'a@alphabet.tld' => 'A']);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris <chris.corbyn@swiftmailer.org>'."\r\n".
'Reply-To: Myself <chris@w3style.co.uk>, Me <my.other@address.com>'."\r\n".
'To: mark@swiftmailer.org, Chris Corbyn <chris@swiftmailer.org>'."\r\n".
'Cc: John West <john@some-site.com>, Big Fred <fred@another-site.co.uk>'."\r\n".
'Bcc: x@alphabet.tld, A <a@alphabet.tld>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString()
);
}
public function testStringBodyIsAppended()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setBody(
'just a test body'."\r\n".
'with a new line'
);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'just a test body'."\r\n".
'with a new line',
$message->toString()
);
}
public function testStringBodyIsEncoded()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setBody(
'Just s'.pack('C*', 0xC2, 0x01, 0x01).'me multi-'."\r\n".
'line message!'
);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'Just s=C2=01=01me multi-'."\r\n".
'line message!',
$message->toString()
);
}
public function testChildrenCanBeAttached()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = $message->getDate();
$boundary = $message->getBoundary();
$part1 = $this->createMimePart();
$part1->setContentType('text/plain');
$part1->setCharset('iso-8859-1');
$part1->setBody('foo');
$message->attach($part1);
$part2 = $this->createMimePart();
$part2->setContentType('text/html');
$part2->setCharset('iso-8859-1');
$part2->setBody('test <b>foo</b>');
$message->attach($part2);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/plain; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/html; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'test <b>foo</b>'.
"\r\n\r\n".
'--'.$boundary.'--'."\r\n",
$message->toString()
);
}
public function testAttachmentsBeingAttached()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = preg_quote($message->getDate()->format('r'), '~');
$boundary = $message->getBoundary();
$part = $this->createMimePart();
$part->setContentType('text/plain');
$part->setCharset('iso-8859-1');
$part->setBody('foo');
$message->attach($part);
$attachment = $this->createAttachment();
$attachment->setContentType('application/pdf');
$attachment->setFilename('foo.pdf');
$attachment->setBody('<pdf data>');
$message->attach($attachment);
$this->assertRegExp(
'~^'.
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/mixed;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="(.*?)"'."\r\n".
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: text/plain; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--\\1--'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: application/pdf; name=foo.pdf'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-Disposition: attachment; filename=foo.pdf'."\r\n".
"\r\n".
preg_quote(base64_encode('<pdf data>'), '~').
"\r\n\r\n".
'--'.$boundary.'--'."\r\n".
'$~D',
$message->toString()
);
}
public function testAttachmentsAndEmbeddedFilesBeingAttached()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = preg_quote($message->getDate()->format('r'), '~');
$boundary = $message->getBoundary();
$part = $this->createMimePart();
$part->setContentType('text/plain');
$part->setCharset('iso-8859-1');
$part->setBody('foo');
$message->attach($part);
$attachment = $this->createAttachment();
$attachment->setContentType('application/pdf');
$attachment->setFilename('foo.pdf');
$attachment->setBody('<pdf data>');
$message->attach($attachment);
$file = $this->createEmbeddedFile();
$file->setContentType('image/jpeg');
$file->setFilename('myimage.jpg');
$file->setBody('<image data>');
$message->attach($file);
$cid = $file->getId();
$this->assertRegExp(
'~^'.
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/mixed;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="(.*?)"'."\r\n".
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: text/plain; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: multipart/related;'."\r\n".
' boundary="(.*?)"'."\r\n".
"\r\n\r\n".
'--\\2'."\r\n".
'Content-Type: image/jpeg; name=myimage.jpg'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-ID: <'.$cid.'>'."\r\n".
'Content-Disposition: inline; filename=myimage.jpg'."\r\n".
"\r\n".
preg_quote(base64_encode('<image data>'), '~').
"\r\n\r\n".
'--\\2--'."\r\n".
"\r\n\r\n".
'--\\1--'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: application/pdf; name=foo.pdf'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-Disposition: attachment; filename=foo.pdf'."\r\n".
"\r\n".
preg_quote(base64_encode('<pdf data>'), '~').
"\r\n\r\n".
'--'.$boundary.'--'."\r\n".
'$~D',
$message->toString()
);
}
public function testComplexEmbeddingOfContent()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = preg_quote($message->getDate()->format('r'), '~');
$boundary = $message->getBoundary();
$attachment = $this->createAttachment();
$attachment->setContentType('application/pdf');
$attachment->setFilename('foo.pdf');
$attachment->setBody('<pdf data>');
$message->attach($attachment);
$file = $this->createEmbeddedFile();
$file->setContentType('image/jpeg');
$file->setFilename('myimage.jpg');
$file->setBody('<image data>');
$part = $this->createMimePart();
$part->setContentType('text/html');
$part->setCharset('iso-8859-1');
$part->setBody('foo <img src="'.$message->embed($file).'" />');
$message->attach($part);
$cid = $file->getId();
$this->assertRegExp(
'~^'.
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/mixed;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: multipart/related;'."\r\n".
' boundary="(.*?)"'."\r\n".
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: text/html; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo <img src=3D"cid:'.$cid.'" />'.//=3D is just = in QP
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: image/jpeg; name=myimage.jpg'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-ID: <'.$cid.'>'."\r\n".
'Content-Disposition: inline; filename=myimage.jpg'."\r\n".
"\r\n".
preg_quote(base64_encode('<image data>'), '~').
"\r\n\r\n".
'--\\1--'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: application/pdf; name=foo.pdf'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-Disposition: attachment; filename=foo.pdf'."\r\n".
"\r\n".
preg_quote(base64_encode('<pdf data>'), '~').
"\r\n\r\n".
'--'.$boundary.'--'."\r\n".
'$~D',
$message->toString()
);
}
public function testAttachingAndDetachingContent()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = preg_quote($message->getDate()->format('r'), '~');
$boundary = $message->getBoundary();
$part = $this->createMimePart();
$part->setContentType('text/plain');
$part->setCharset('iso-8859-1');
$part->setBody('foo');
$message->attach($part);
$attachment = $this->createAttachment();
$attachment->setContentType('application/pdf');
$attachment->setFilename('foo.pdf');
$attachment->setBody('<pdf data>');
$message->attach($attachment);
$file = $this->createEmbeddedFile();
$file->setContentType('image/jpeg');
$file->setFilename('myimage.jpg');
$file->setBody('<image data>');
$message->attach($file);
$cid = $file->getId();
$message->detach($attachment);
$this->assertRegExp(
'~^'.
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/plain; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: multipart/related;'."\r\n".
' boundary="(.*?)"'."\r\n".
"\r\n\r\n".
'--\\1'."\r\n".
'Content-Type: image/jpeg; name=myimage.jpg'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-ID: <'.$cid.'>'."\r\n".
'Content-Disposition: inline; filename=myimage.jpg'."\r\n".
"\r\n".
preg_quote(base64_encode('<image data>'), '~').
"\r\n\r\n".
'--\\1--'."\r\n".
"\r\n\r\n".
'--'.$boundary.'--'."\r\n".
'$~D',
$message->toString(),
'%s: Attachment should have been detached'
);
}
public function testBoundaryDoesNotAppearAfterAllPartsAreDetached()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = $message->getDate();
$boundary = $message->getBoundary();
$part1 = $this->createMimePart();
$part1->setContentType('text/plain');
$part1->setCharset('iso-8859-1');
$part1->setBody('foo');
$message->attach($part1);
$part2 = $this->createMimePart();
$part2->setContentType('text/html');
$part2->setCharset('iso-8859-1');
$part2->setBody('test <b>foo</b>');
$message->attach($part2);
$message->detach($part1);
$message->detach($part2);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n",
$message->toString(),
'%s: Message should be restored to orignal state after parts are detached'
);
}
public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setCharset('utf-8');
$message->setFormat('flowed');
$message->setDelSp(true);
$id = $message->getId();
$date = $message->getDate();
$boundary = $message->getBoundary();
$part1 = $this->createMimePart();
$part1->setContentType('text/plain');
$part1->setCharset('iso-8859-1');
$part1->setBody('foo');
$message->attach($part1);
$part2 = $this->createMimePart();
$part2->setContentType('text/html');
$part2->setCharset('iso-8859-1');
$part2->setBody('test <b>foo</b>');
$message->attach($part2);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/plain; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/html; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'test <b>foo</b>'.
"\r\n\r\n".
'--'.$boundary.'--'."\r\n",
$message->toString()
);
}
public function testBodyCanBeSetWithAttachments()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setContentType('text/html');
$message->setCharset('iso-8859-1');
$message->setBody('foo');
$id = $message->getId();
$date = $message->getDate()->format('r');
$boundary = $message->getBoundary();
$attachment = $this->createAttachment();
$attachment->setContentType('application/pdf');
$attachment->setFilename('foo.pdf');
$attachment->setBody('<pdf data>');
$message->attach($attachment);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/mixed;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/html; charset=iso-8859-1'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: application/pdf; name=foo.pdf'."\r\n".
'Content-Transfer-Encoding: base64'."\r\n".
'Content-Disposition: attachment; filename=foo.pdf'."\r\n".
"\r\n".
base64_encode('<pdf data>').
"\r\n\r\n".
'--'.$boundary.'--'."\r\n",
$message->toString()
);
}
public function testHtmlPartAlwaysAppearsLast()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$id = $message->getId();
$date = $message->getDate()->format('r');
$boundary = $message->getBoundary();
$part1 = $this->createMimePart();
$part1->setContentType('text/html');
$part1->setBody('foo');
$part2 = $this->createMimePart();
$part2->setContentType('text/plain');
$part2->setBody('bar');
$message->attach($part1);
$message->attach($part2);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'bar'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/html'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary.'--'."\r\n",
$message->toString()
);
}
public function testBodyBecomesPartIfOtherPartsAttached()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setContentType('text/html');
$message->setBody('foo');
$id = $message->getId();
$date = $message->getDate()->format('r');
$boundary = $message->getBoundary();
$part2 = $this->createMimePart();
$part2->setContentType('text/plain');
$part2->setBody('bar');
$message->attach($part2);
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: multipart/alternative;'."\r\n".
' boundary="'.$boundary.'"'."\r\n".
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'bar'.
"\r\n\r\n".
'--'.$boundary."\r\n".
'Content-Type: text/html'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'foo'.
"\r\n\r\n".
'--'.$boundary.'--'."\r\n",
$message->toString()
);
}
public function testBodyIsCanonicalized()
{
$message = $this->createMessage();
$message->setReturnPath('chris@w3style.co.uk');
$message->setSubject('just a test subject');
$message->setFrom([
'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]);
$message->setBody(
'just a test body'."\n".
'with a new line'
);
$id = $message->getId();
$date = $message->getDate();
$this->assertEquals(
'Return-Path: <chris@w3style.co.uk>'."\r\n".
'Message-ID: <'.$id.'>'."\r\n".
'Date: '.$date->format('r')."\r\n".
'Subject: just a test subject'."\r\n".
'From: Chris Corbyn <chris.corbyn@swiftmailer.org>'."\r\n".
'MIME-Version: 1.0'."\r\n".
'Content-Type: text/plain'."\r\n".
'Content-Transfer-Encoding: quoted-printable'."\r\n".
"\r\n".
'just a test body'."\r\n".
'with a new line',
$message->toString()
);
}
protected function createMessage()
{
return new Swift_Message();
}
protected function createMimePart()
{
return new Swift_MimePart();
}
protected function createAttachment()
{
return new Swift_Attachment();
}
protected function createEmbeddedFile()
{
return new Swift_EmbeddedFile();
}
}