/** * Send a mail using this transport * * @param Zend_Mail $mail * @access public * @return void * @throws Zend_Mail_Transport_Exception if mail is empty */ public function send(Zend_Mail $mail) { $this->_isMultipart = false; $this->_mail = $mail; $this->_parts = $mail->getParts(); $mime = $mail->getMime(); // Build body content $this->_buildBody(); // Determine number of parts and boundary $count = count($this->_parts); $boundary = null; if ($count < 1) { throw new Zend_Mail_Transport_Exception('Empty mail cannot be sent'); } if ($count > 1) { // Multipart message; create new MIME object and boundary $mime = new Zend_Mime($this->_mail->getMimeBoundary()); $boundary = $mime->boundary(); } elseif ($this->_isMultipart) { // multipart/alternative -- grab boundary $boundary = $this->_parts[0]->boundary; } // Determine recipients, and prepare headers $this->recipients = implode(',', $mail->getRecipients()); $this->_prepareHeaders($this->_getHeaders($boundary)); // Create message body // This is done so that the same Zend_Mail object can be used in // multiple transports $message = new Zend_Mime_Message(); $message->setParts($this->_parts); $message->setMime($mime); $this->body = $message->generateMessage($this->EOL); // Send to transport! $this->_sendMail(); }
/** * Send a mail using this transport * * @param OpenPGP_Zend_Mail $mail * @access public * @return void * @throws Zend_Mail_Transport_Exception if mail is empty */ public function send(OpenPGP_Zend_Mail $mail) { $this->_isMultipart = false; $this->_mail = $mail; $this->_parts = $mail->getParts(); $mime = $mail->getMime(); // Build body content $this->_buildBody(); // Determine number of parts and boundary $count = count($this->_parts); $boundary = null; if ($count < 1) { throw new Zend_Mail_Transport_Exception('Empty mail cannot be sent'); } if ($count > 1) { // Multipart message; create new MIME object and boundary $mime = new Zend_Mime($this->_mail->getMimeBoundary()); $boundary = $mime->boundary(); } elseif ($this->_isMultipart) { // multipart/alternative -- grab boundary $boundary = $this->_parts[0]->boundary; } // Determine recipients, and prepare headers $this->recipients = implode(',', $mail->getRecipients()); $this->_prepareHeaders($this->_getHeaders($boundary)); // Create message body // This is done so that the same OpenPGP_Zend_Mail object can be used in // multiple transports $message = new Zend_Mime_Message(); $message->setParts($this->_parts); $message->setMime($mime); $this->body = $message->generateMessage($this->EOL); //////////////////////////////////////////////////////// // // // ALPHAFIELDS 2012-11-03: ADDED PGP/MIME ENCRYPTION // // USING lib/openpgp/opepgplib.php // // // //////////////////////////////////////////////////////// // get from globals (set in tiki-setup.php) global $openpgplib; $pgpmime_msg = $openpgplib->prepareEncryptWithZendMail($this->header, $this->body, $mail->getRecipients()); $this->header = $pgpmime_msg[0]; // set pgp/mime headers from result array $this->body = $pgpmime_msg[1]; // set pgp/mime encrypted message body from result array //////////////////////////////////////////////////////// // // // ALPHAFIELDS 2012-11-03: ..END PGP/MIME ENCRYPTION // // // //////////////////////////////////////////////////////// // Send to transport! $this->_sendMail(); }
/** * check if attachment handling works * */ public function testAttachment() { $mail = new Zend_Mail(); $mail->setBodyText('My Nice Test Text'); $mail->addTo('*****@*****.**', 'Test Recipient'); $mail->setFrom('*****@*****.**', 'Test Sender'); $mail->setSubject('Test: Attachment Test with Zend_Mail'); $at = $mail->addAttachment('abcdefghijklmnopqrstuvexyz'); $at->type = 'image/gif'; $at->id = 12; $at->filename = 'test.gif'; $mock = new Zend_Mail_Transport_Mock(); $mail->send($mock); // now check what was generated by Zend_Mail. // first the mail headers: $this->assertContains('Content-Type: multipart/mixed', $mock->header); $boundary = $mail->getMimeBoundary(); $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->assertNotEquals(null, $p1); // cut out first (Text) part $start1 = $p1 + 3 + strlen($boundary); $p2 = strpos($mock->body, "--{$boundary}\n", $start1); $this->assertNotEquals(null, $p2); $partBody1 = substr($mock->body, $start1, $p2 - $start1); $this->assertContains('Content-Type: text/plain', $partBody1); $this->assertContains('My Nice Test Text', $partBody1); // check second (HTML) part // search for end boundary $start2 = $p2 + 3 + strlen($boundary); $p3 = strpos($mock->body, "--{$boundary}--"); $this->assertNotEquals(null, $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); }