Esempio n. 1
0
 public function testBCC()
 {
     $expected = ['*****@*****.**', 'Bob <*****@*****.**>'];
     $bcc = Message::parseAddressList($expected);
     $this->message->setBCC($bcc);
     $this->assertEquals($expected, $this->message->getBCCList());
 }
 /**
  * @dataProvider newMessageDataProvider
  */
 public function testSend($isUnifiedInbox, $isReply)
 {
     $account = $isUnifiedInbox ? $this->unifiedAccount : $this->account;
     $folderId = base64_encode('My folder');
     $subject = 'Hello';
     $body = 'Hi!';
     $from = '*****@*****.**';
     $to = '*****@*****.**';
     $cc = '"user2" <*****@*****.**>, user3@example.com';
     $bcc = '*****@*****.**';
     $draftUID = 45;
     $messageId = $isReply ? 123 : null;
     $attachmentName = 'kitten.png';
     $attachments = [['fileName' => $attachmentName]];
     $this->accountService->expects($this->once())->method('find')->with($this->userId, $this->accountId)->will($this->returnValue($account));
     if ($isUnifiedInbox) {
         $this->unifiedAccount->expects($this->once())->method('resolve')->with($messageId)->will($this->returnValue([$this->account, $folderId, $messageId]));
     }
     if ($isReply) {
         $message = $this->getMockBuilder('OCA\\Mail\\Model\\ReplyMessage')->disableOriginalConstructor()->getMock();
         $this->account->expects($this->once())->method('newReplyMessage')->will($this->returnValue($message));
         $mailbox = $this->getMockBuilder('OCA\\Mail\\Service\\IMailBox')->disableOriginalConstructor()->getMock();
         $this->account->expects($this->once())->method('getMailbox')->with(base64_decode($folderId))->will($this->returnValue($mailbox));
         $reply = new Message();
         $mailbox->expects($this->once())->method('getMessage')->with($messageId)->will($this->returnValue($reply));
         $message->expects($this->once())->method('setRepliedMessage')->with($reply);
     } else {
         $message = $this->getMockBuilder('OCA\\Mail\\Model\\Message')->disableOriginalConstructor()->getMock();
         $this->account->expects($this->once())->method('newMessage')->will($this->returnValue($message));
     }
     $message->expects($this->once())->method('setTo')->with(Message::parseAddressList($to));
     $message->expects($this->once())->method('setSubject')->with($subject);
     $message->expects($this->once())->method('setFrom')->with($from);
     $message->expects($this->once())->method('setCC')->with(Message::parseAddressList($cc));
     $message->expects($this->once())->method('setBcc')->with(Message::parseAddressList($bcc));
     $message->expects($this->once())->method('setContent')->with($body);
     $this->account->expects($this->once())->method('getEMailAddress')->will($this->returnValue($from));
     $this->account->expects($this->once())->method('sendMessage')->with($message, $draftUID);
     $this->userFolder->expects($this->at(0))->method('nodeExists')->with($attachmentName)->will($this->returnValue(true));
     $file = $this->getMockBuilder('OCP\\Files\\File')->disableOriginalConstructor()->getMock();
     $this->userFolder->expects($this->once())->method('get')->with($attachmentName)->will($this->returnValue($file));
     $expected = new JSONResponse();
     $actual = $this->controller->send($this->accountId, $folderId, $subject, $body, $to, $cc, $bcc, $draftUID, $messageId, $attachments);
     $this->assertEquals($expected, $actual);
 }
 /**
  * @dataProvider newMessageDataProvider
  */
 public function testDraft($isUnifiedInbox, $withPreviousDraft)
 {
     $account = $isUnifiedInbox ? $this->unifiedAccount : $this->account;
     $subject = 'Hello';
     $body = 'Hi!';
     $from = '*****@*****.**';
     $to = '*****@*****.**';
     $cc = '"user2" <*****@*****.**>, user3@example.com';
     $bcc = '*****@*****.**';
     $messageId = 123;
     $uid = $withPreviousDraft ? 123 : null;
     $newUID = 124;
     $this->accountService->expects($this->once())->method('find')->with($this->userId, $this->accountId)->will($this->returnValue($account));
     if ($isUnifiedInbox) {
         $this->unifiedAccount->expects($this->once())->method('resolve')->with($messageId)->will($this->returnValue([$this->account]));
     }
     $message = $this->getMockBuilder('OCA\\Mail\\Model\\Message')->disableOriginalConstructor()->getMock();
     $this->account->expects($this->once())->method('newMessage')->will($this->returnValue($message));
     $message->expects($this->once())->method('setTo')->with(Message::parseAddressList($to));
     $message->expects($this->once())->method('setSubject')->with($subject);
     $message->expects($this->once())->method('setFrom')->with($from);
     $message->expects($this->once())->method('setCC')->with(Message::parseAddressList($cc));
     $message->expects($this->once())->method('setBcc')->with(Message::parseAddressList($bcc));
     $message->expects($this->once())->method('setContent')->with($body);
     $this->account->expects($this->once())->method('getEMailAddress')->will($this->returnValue($from));
     $this->account->expects($this->once())->method('saveDraft')->with($message, $uid)->will($this->returnValue($newUID));
     $expected = new JSONResponse(['uid' => $newUID]);
     $actual = $this->controller->draft($this->accountId, $subject, $body, $to, $cc, $bcc, $uid, $messageId);
     $this->assertEquals($expected, $actual);
 }
Esempio n. 4
0
 /**
  * @NoAdminRequired
  * 
  * @param int $accountId
  * @param string $subject
  * @param string $body
  * @param string $to
  * @param string $cc
  * @param string $bcc
  * @param int $uid
  * @param string $messageId
  * @return JSONResponse
  */
 public function draft($accountId, $subject, $body, $to, $cc, $bcc, $uid, $messageId)
 {
     if (is_null($uid)) {
         $this->logger->info("Saving a new draft in account <{$accountId}>");
     } else {
         $this->logger->info("Updating draft <{$uid}> in account <{$accountId}>");
     }
     $account = $this->accountService->find($this->currentUserId, $accountId);
     if ($account instanceof UnifiedAccount) {
         list($account) = $account->resolve($messageId);
     }
     if (!$account instanceof Account) {
         return new JSONResponse(array('message' => 'Invalid account'), Http::STATUS_BAD_REQUEST);
     }
     $message = $account->newMessage();
     $message->setTo(Message::parseAddressList($to));
     $message->setSubject($subject ?: '');
     $message->setFrom($account->getEMailAddress());
     $message->setCC(Message::parseAddressList($cc));
     $message->setBcc(Message::parseAddressList($bcc));
     $message->setContent($body);
     // create transport and save message
     try {
         $newUID = $account->saveDraft($message, $uid);
     } catch (\Horde_Exception $ex) {
         $this->logger->error('Saving draft failed: ' . $ex->getMessage());
         return new JSONResponse(['message' => $ex->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR);
     }
     return new JSONResponse(['uid' => $newUID]);
 }
Esempio n. 5
0
 /**
  * @NoAdminRequired
  *
  * @param int $accountId
  * @param string $folderId
  * @param string $subject
  * @param string $body
  * @param string $to
  * @param string $cc
  * @param string $bcc
  * @param int $draftUID
  * @param string $messageId
  * @param mixed $attachments
  * @return JSONResponse
  */
 public function send($accountId, $folderId, $subject, $body, $to, $cc, $bcc, $draftUID, $messageId, $attachments)
 {
     $account = $this->accountService->find($this->currentUserId, $accountId);
     if ($account instanceof UnifiedAccount) {
         list($account, $folderId, $messageId) = $account->resolve($messageId);
     }
     if (!$account instanceof Account) {
         return new JSONResponse(['message' => 'Invalid account'], Http::STATUS_BAD_REQUEST);
     }
     $mailbox = null;
     if (!is_null($folderId) && !is_null($messageId)) {
         // Reply
         $message = $account->newReplyMessage();
         $mailbox = $account->getMailbox(base64_decode($folderId));
         $repliedMessage = $mailbox->getMessage($messageId);
         if (is_null($subject)) {
             // No subject set – use the original one
             $message->setSubject($repliedMessage->getSubject());
         } else {
             $message->setSubject($subject);
         }
         if (is_null($to)) {
             $message->setTo($repliedMessage->getToList());
         } else {
             $message->setTo(Message::parseAddressList($to));
         }
         $message->setRepliedMessage($repliedMessage);
     } else {
         // New message
         $message = $account->newMessage();
         $message->setTo(Message::parseAddressList($to));
         $message->setSubject($subject ?: '');
     }
     $message->setFrom($account->getEMailAddress());
     $message->setCC(Message::parseAddressList($cc));
     $message->setBcc(Message::parseAddressList($bcc));
     $message->setContent($body);
     if (is_array($attachments)) {
         foreach ($attachments as $attachment) {
             $fileName = $attachment['fileName'];
             if ($this->userFolder->nodeExists($fileName)) {
                 $f = $this->userFolder->get($fileName);
                 if ($f instanceof File) {
                     $message->addAttachmentFromFiles($f);
                 }
             }
         }
     }
     try {
         $account->sendMessage($message, $draftUID);
         // in case of reply we flag the message as answered
         if ($message instanceof ReplyMessage) {
             $mailbox->setMessageFlag($messageId, Horde_Imap_Client::FLAG_ANSWERED, true);
         }
     } catch (\Horde_Exception $ex) {
         $this->logger->error('Sending mail failed: ' . $ex->getMessage());
         return new JSONResponse(array('message' => $ex->getMessage()), Http::STATUS_INTERNAL_SERVER_ERROR);
     }
     return new JSONResponse();
 }
Esempio n. 6
0
 /**
  * @dataProvider addressListDataProvider
  */
 public function testParseAddressList($list, $expected)
 {
     $actual = Message::parseAddressList($list);
     $this->assertEquals($expected, $actual);
 }