/** * test line end encoding of Zend_Mime_Part / Smtp Protocol */ public function testSendWithWrongLineEnd() { $config = TestServer::getInstance()->getConfig(); $mailDomain = $config->maildomain ? $config->maildomain : 'tine20.org'; // build message with wrong line end rfc822 part $mail = new Tinebase_Mail('utf-8'); $mail->setBodyText('testmail' . "\r\n" . "\r\n"); $mail->setFrom('unittest@' . $mailDomain, 'unittest'); $mail->setSubject('line end test'); $mail->addTo('unittest@' . $mailDomain); $mail->addHeader('X-Tine20TestMessage', 'lineend'); // replace EOLs $content = file_get_contents(dirname(dirname(__FILE__)) . '/files/text_plain.eml'); $content = preg_replace("/\\x0a/", "\r\n", $content); $stream = fopen("php://temp", 'r+'); fputs($stream, $content); rewind($stream); $attachment = new Zend_Mime_Part($stream); $attachment->type = Felamimail_Model_Message::CONTENT_TYPE_MESSAGE_RFC822; $attachment->encoding = null; $attachment->charset = 'ISO-8859-1'; $attachment->filename = 'attach.eml'; $attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT; $mail->addAttachment($attachment); $smtpConfig = $this->_account->getSmtpConfig(); $transport = new Felamimail_Transport($smtpConfig['hostname'], $smtpConfig); $mail->send($transport); $smtpLog = $transport->getConnection()->getLog(); $badLineEndCount = preg_match_all("/\\x0d\\x0d\\x0a/", $smtpLog, $matches); $this->assertEquals(0, $badLineEndCount); $badLineEndCount = preg_match_all("/\\x0d/", $smtpLog, $matches); $this->assertTrue(preg_match_all("/\\x0d/", $smtpLog, $matches) > 70, 'unix line ends are missing'); }
/** * test line end encoding of Zend_Mime_Part / Smtp Protocol */ public function testSendWithWrongLineEnd() { $this->markTestSkipped('FIXME: 0011688: fix line end encoding in attachments'); // build message with wrong line end rfc822 part $mail = new Tinebase_Mail('utf-8'); $mail->setBodyText('testmail' . "\r\n" . "\r\n"); $mail->setFrom($this->_getEmailAddress(), 'unittest'); $mail->setSubject('line end test'); $mail->addTo($this->_getEmailAddress()); $mail->addHeader('X-Tine20TestMessage', 'lineend'); // replace EOLs $content = file_get_contents(dirname(dirname(__FILE__)) . '/files/text_plain.eml'); $content = preg_replace("/\\x0a/", "\r\n", $content); $stream = fopen("php://temp", 'r+'); fputs($stream, $content); rewind($stream); $attachment = new Zend_Mime_Part($stream); $attachment->type = Felamimail_Model_Message::CONTENT_TYPE_MESSAGE_RFC822; $attachment->encoding = null; $attachment->charset = 'ISO-8859-1'; $attachment->filename = 'attach.eml'; $attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT; $mail->addAttachment($attachment); $smtpConfig = $this->_account->getSmtpConfig(); $transport = new Felamimail_Transport($smtpConfig['hostname'], $smtpConfig); Zend_Mail_Protocol_Abstract::$loggingEnabled = true; $mail->send($transport); Zend_Mail_Protocol_Abstract::$loggingEnabled = false; $smtpLog = $transport->getConnection()->getLog(); $badLineEndCount = preg_match_all("/\\x0d\\x0d\\x0a/", $smtpLog, $matches); $this->assertEquals(0, $badLineEndCount); $unixLineEndCount = preg_match_all("/\\x0d/", $smtpLog, $matches); $this->assertTrue($unixLineEndCount > 70, 'unix line ends are missing (got ' . $unixLineEndCount . ' unix line ends)'); }
/** * test get smtp config */ public function testGetSmtpConfig() { $smtpConfig = Tinebase_Config::getInstance()->getConfigAsArray(Tinebase_Config::SMTP); $account = new Felamimail_Model_Account(array('type' => Felamimail_Model_Account::TYPE_SYSTEM)); $accountSmtpConfig = $account->getSmtpConfig(); if (array_key_exists('primarydomain', $smtpConfig)) { $this->assertContains($smtpConfig['primarydomain'], $accountSmtpConfig['username']); } if (TestServer::getInstance()->getConfig()->mailserver) { $this->assertEquals(TestServer::getInstance()->getConfig()->mailserver, $accountSmtpConfig['hostname']); } }
/** * test get smtp config */ public function testGetSmtpConfig() { $this->markTestSkipped('this test has to be refactored'); $smtpConfig = Tinebase_Config::getInstance()->get(Tinebase_Config::SMTP, new Tinebase_Config_Struct())->toArray(); $account = new Felamimail_Model_Account(array('type' => Felamimail_Model_Account::TYPE_SYSTEM)); $accountSmtpConfig = $account->getSmtpConfig(); if (isset($smtpConfig['primarydomain']) || array_key_exists('primarydomain', $smtpConfig)) { $this->assertContains($smtpConfig['primarydomain'], $accountSmtpConfig['username']); } if (TestServer::getInstance()->getConfig()->mailserver) { $this->assertEquals(TestServer::getInstance()->getConfig()->mailserver, $accountSmtpConfig['hostname']); } }
/** * send mail via transport (smtp) * * @param Zend_Mail $_mail * @param Felamimail_Model_Account $_account * @param boolean $_saveInSent * @param Felamimail_Model_Message $_message * @param array $_nonPrivateRecipients */ protected function _sendMailViaTransport(Zend_Mail $_mail, Felamimail_Model_Account $_account, Felamimail_Model_Message $_message = null, $_saveInSent = false, $_nonPrivateRecipients = array()) { $smtpConfig = $_account->getSmtpConfig(); if (!empty($smtpConfig) && (isset($smtpConfig['hostname']) || array_key_exists('hostname', $smtpConfig))) { $transport = new Felamimail_Transport($smtpConfig['hostname'], $smtpConfig); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { $debugConfig = $smtpConfig; $whiteList = array('hostname', 'username', 'port', 'auth', 'ssl'); foreach ($debugConfig as $key => $value) { if (!in_array($key, $whiteList)) { unset($debugConfig[$key]); } } Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' About to send message via SMTP with the following config: ' . print_r($debugConfig, true)); } Tinebase_Smtp::getInstance()->sendMessage($_mail, $transport); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' successful.'); } // append mail to sent folder if ($_saveInSent) { $this->_saveInSent($transport, $_account, $this->_getAdditionalHeaders($_message)); } if ($_message !== null) { // add reply/forward flags if set if (!empty($_message->flags) && ($_message->flags == Zend_Mail_Storage::FLAG_ANSWERED || $_message->flags == Zend_Mail_Storage::FLAG_PASSED) && $_message->original_id instanceof Felamimail_Model_Message) { Felamimail_Controller_Message_Flags::getInstance()->addFlags($_message->original_id, array($_message->flags)); } // add email notes to contacts (only to/cc) if ($_message->note) { $this->_addEmailNote($_nonPrivateRecipients, $_message->subject, $_message->getPlainTextBody()); } } } else { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not send message, no smtp config found.'); } }
/** * send mail via transport (smtp) * * @param Zend_Mail $_mail * @param Felamimail_Model_Account $_account * @param boolean $_saveInSent * @param Felamimail_Model_Message $_message * @param array $_nonPrivateRecipients */ protected function _sendMailViaTransport(Zend_Mail $_mail, Felamimail_Model_Account $_account, Felamimail_Model_Message $_message = NULL, $_saveInSent = false, $_nonPrivateRecipients = array()) { $smtpConfig = $_account->getSmtpConfig(); if (!empty($smtpConfig) && array_key_exists('hostname', $smtpConfig)) { $transport = new Felamimail_Transport($smtpConfig['hostname'], $smtpConfig); // send message via smtp if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' About to send message via SMTP ...'); } Tinebase_Smtp::getInstance()->sendMessage($_mail, $transport); if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' successful.'); } // append mail to sent folder if ($_saveInSent) { $this->_saveInSent($transport, $_account, $_message !== NULL ? array('Bcc' => $_message->bcc) : array()); } if ($_message !== NULL) { // add reply/forward flags if set if (!empty($_message->flags) && ($_message->flags == Zend_Mail_Storage::FLAG_ANSWERED || $_message->flags == Zend_Mail_Storage::FLAG_PASSED) && $_message->original_id instanceof Felamimail_Model_Message) { Felamimail_Controller_Message_Flags::getInstance()->addFlags($_message->original_id, array($_message->flags)); } // add email notes to contacts (only to/cc) if ($_message->note) { $this->_addEmailNote($_nonPrivateRecipients, $_message->subject, $_message->getPlainTextBody()); } } } else { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' Could not send message, no smtp config found.'); } }