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); }
/** * @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]); }
/** * @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(); }
/** * @dataProvider addressListDataProvider */ public function testParseAddressList($list, $expected) { $actual = Message::parseAddressList($list); $this->assertEquals($expected, $actual); }