/** * Prepare message content. * @param EmailMessage $emailMessage * @return string */ public static function prepareMessageContent(EmailMessage $emailMessage) { $messageContent = null; if (!($emailMessage->hasErrors() || $emailMessage->hasSendError())) { $messageContent .= Zurmo::t('EmailMessagesModule', 'Message successfully sent') . "\n"; } else { $messageContent .= Zurmo::t('EmailMessagesModule', 'Message failed to send') . "\n"; if ($emailMessage->hasSendError()) { $messageContent .= $emailMessage->error . "\n"; } else { //todo: refactor to use ZurmoHtml::errorSummary after this supports that method //todo: supports nested messages better. $errors = $emailMessage->getErrors(); foreach ($errors as $attributeNameWithErrors) { foreach ($attributeNameWithErrors as $attributeError) { if (is_array($attributeError)) { foreach ($attributeError as $nestedAttributeError) { $messageContent .= reset($nestedAttributeError) . "\n"; } } else { $messageContent .= reset($attributeError) . "\n"; } } } } } return $messageContent; }
/** * Execute the action. * @param array command line parameters specific for this command */ public function actionSend($username, $toAddress, $subject = 'A test email from Zurmo', $textContent = 'A test text message from Zurmo.', $htmlContent = 'A test html message from Zurmo.', $host = null, $port = null, $outboundUsername = null, $outboundPassword = null, $outboundSecurity = null) { if (!isset($username)) { $this->usageError('A username must be specified.'); } if (!isset($toAddress)) { $this->usageError('You must specify a to address.'); } try { Yii::app()->user->userModel = User::getByUsername($username); } catch (NotFoundException $e) { $this->usageError('The specified username does not exist.'); } if ($host != null) { Yii::app()->emailHelper->outboundHost = $host; } if ($port != null) { Yii::app()->emailHelper->outboundPort = $port; } if ($outboundUsername != null) { Yii::app()->emailHelper->outboundUsername = $outboundUsername; } if ($outboundUsername != null) { Yii::app()->emailHelper->outboundPassword = $outboundPassword; } if ($outboundSecurity != null && $outboundSecurity != '' && $outboundSecurity != 'false') { Yii::app()->emailHelper->outboundSecurity = $outboundSecurity; } else { Yii::app()->emailHelper->outboundSecurity = null; } echo "\n"; echo 'Using type:' . Yii::app()->emailHelper->outboundType . "\n"; echo 'Using host:' . Yii::app()->emailHelper->outboundHost . "\n"; echo 'Using port:' . Yii::app()->emailHelper->outboundPort . "\n"; echo 'Using username:'******'Using password:'******'Using outbound security:' . Yii::app()->emailHelper->outboundSecurity . "\n\n"; } else { echo 'Using outbound security: none' . "\n\n"; } echo 'Sending Email Message' . "\n"; $emailMessage = new EmailMessage(); $emailMessage->owner = BaseJobControlUserConfigUtil::getUserToRunAs(); $emailMessage->subject = $subject; $emailContent = new EmailMessageContent(); $emailContent->textContent = $textContent; $emailContent->htmlContent = $htmlContent; $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = Yii::app()->emailHelper->resolveFromAddressByUser(Yii::app()->user->userModel); $sender->fromName = strval(Yii::app()->user->userModel); $sender->personOrAccount = Yii::app()->user->userModel; $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->toAddress = $toAddress; $recipient->toName = 'Test Recipient'; $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->recipients->add($recipient); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); $validated = $emailMessage->validate(); if (!$validated) { $this->addErrorsAsUsageErrors($emailMessage->getErrors()); } Yii::app()->emailHelper->sendImmediately($emailMessage); if (!$emailMessage->hasSendError()) { echo Zurmo::t('Commands', 'Message successfully sent') . "\n"; } else { echo Zurmo::t('Commands', 'Message failed to send') . "\n"; echo $emailMessage->error . "\n"; } $saved = $emailMessage->save(); if (!$saved) { throw new NotSupportedException(); } }
protected function resolveEmailMessage($subject = 'Subject', $textContent = 'My First Message', $htmlContent = 'Some fake HTML content', $fromAddress = '*****@*****.**', $fromName = 'Zurmo', $toAddress = '*****@*****.**', $toName = null, $contact = null) { if (!isset($contact)) { $contact = ContactTestHelper::createContactByNameForOwner('emailContact', Yii::app()->user->userModel); } $emailMessage = new EmailMessage(); $emailMessage->owner = $contact->owner; $emailMessage->subject = $subject; $emailContent = new EmailMessageContent(); $emailContent->textContent = $textContent; $emailContent->htmlContent = $htmlContent; $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = $fromAddress; $sender->fromName = $fromName; $sender->personsOrAccounts->add(Yii::app()->user->userModel); $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->toAddress = $toAddress; if (!isset($toName)) { $toName = strval($contact); } $recipient->toName = $toName; $recipient->personsOrAccounts->add($contact); $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->recipients->add($recipient); $emailBox = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel); $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_OUTBOX); $saved = $emailMessage->save(); if (!$saved) { var_dump($emailMessage->getErrors()); throw new FailedToSaveModelException(); } return $emailMessage; }
/** * @depends testCreateAndSendEmailMessageWithAttachment */ public function testMultipleRecipientsAndTypes() { $billy = User::getByUsername('billy'); $jane = User::getByUsername('jane'); $sally = User::getByUsername('sally'); $jason = User::getByUsername('jason'); $this->assertEquals(3, EmailMessage::getCount()); $emailMessage = new EmailMessage(); $emailMessage->owner = $jane; $emailMessage->subject = 'My Third Email'; //Attempt to save without setting required information $saved = $emailMessage->save(); $this->assertFalse($saved); $compareData = array('folder' => array('name' => array('Name cannot be blank.'), 'emailBox' => array('name' => array('Name cannot be blank.'))), 'sender' => array('fromAddress' => array('From Address cannot be blank.'))); $this->assertEquals($compareData, $emailMessage->getErrors()); //Set sender, and recipient, and content $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My Third Message'; $emailMessage->content = $emailContent; //Sending from jane $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Jane Smith'; $sender->personsOrAccounts->add($jane); $emailMessage->sender = $sender; //Recipient is billy. $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Billy James'; $recipient->type = EmailMessageRecipient::TYPE_TO; $recipient->personsOrAccounts->add($billy); $emailMessage->recipients->add($recipient); //CC recipient is Sally $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Sally Pail'; $recipient->type = EmailMessageRecipient::TYPE_CC; $recipient->personsOrAccounts->add($sally); $emailMessage->recipients->add($recipient); //BCC recipient is Jason $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Jason Blue'; $recipient->type = EmailMessageRecipient::TYPE_BCC; $recipient->personsOrAccounts->add($jason); $emailMessage->recipients->add($recipient); //At this point the message is not in a folder. $this->assertTrue($emailMessage->folder->id < 0); $box = EmailBox::resolveAndGetByName('JaneBox'); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); //Save, at this point the email should be in the draft folder $saved = $emailMessage->save(); $this->assertTrue($saved); $this->assertTrue($emailMessage->folder->id > 0); //Now send the message. Yii::app()->emailHelper->send($emailMessage); }