/** * Check if Mails with HTML and Text Body are generated correctly. * */ public function testMultipartAlternativePlusAttachment() { $mail = new Mail\Mail(); $mail->setBodyText('My Nice Test Text'); $mail->setBodyHtml('My Nice <b>Test</b> Text'); $mail->addTo('*****@*****.**', 'Test Recipient'); $mail->setFrom('*****@*****.**', 'Test Sender'); $mail->setSubject('Test: Alternate Mail with Zend_Mail'); $at = $mail->createAttachment('abcdefghijklmnopqrstuvexyz'); $at->type = 'image/gif'; $at->id = 12; $at->filename = 'test.gif'; $mock = new TransportMock(); $mail->send($mock); // check headers $this->assertTrue($mock->called); $this->assertContains('multipart/mixed', $mock->header); $boundary = $mock->boundary; $this->assertContains('boundary="' . $boundary . '"', $mock->header); $this->assertContains('MIME-Version: 1.0', $mock->header); // check body // search for first boundary $p1 = strpos($mock->body, "--$boundary\n"); $this->assertNotNull($p1); // cut out first (multipart/alternative) part $start1 = $p1 + 3 + strlen($boundary); $p2 = strpos($mock->body, "--$boundary\n", $start1); $this->assertNotNull($p2); $partBody1 = substr($mock->body, $start1, ($p2 - $start1)); $this->assertContains('Content-Type: multipart/alternative', $partBody1); $this->assertContains('Content-Type: text/plain', $partBody1); $this->assertContains('Content-Type: text/html', $partBody1); $this->assertContains('My Nice Test Text', $partBody1); $this->assertContains('My Nice <b>Test</b> Text', $partBody1); // check second (image) part // search for end boundary $start2 = $p2 + 3 + strlen($boundary); $p3 = strpos($mock->body, "--$boundary--"); $this->assertNotNull($p3); $partBody2 = substr($mock->body, $start2, ($p3 - $start2)); $this->assertContains('Content-Type: image/gif', $partBody2); $this->assertContains('Content-Transfer-Encoding: base64', $partBody2); $this->assertContains('Content-ID: <12>', $partBody2); }