public function testRun() { $quote = DatabaseCompatibilityUtil::getQuote(); $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_SENT); //Create 2 sent notifications, and set one with a date over a week ago (8 days ago) for the modifiedDateTime $emailMessage = EmailMessageTestHelper::createDraftSystemEmail('My Email Message', $super); $emailMessage->folder = $folder; $saved = $emailMessage->save(); $this->assertTrue($saved); $modifiedDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - 60 * 60 * 24 * 8); $sql = "Update item set modifieddatetime = '" . $modifiedDateTime . "' where id = " . $emailMessage->getClassId('Item'); ZurmoRedBean::exec($sql); $emailMessage2 = EmailMessageTestHelper::createDraftSystemEmail('My Email Message 2', $super); $emailMessage2->folder = $folder; $saved = $emailMessage2->save(); $this->assertTrue($saved); $this->assertEquals(2, EmailMessage::getCount()); $job = new ClearSentNotificationsEmailJob(); $this->assertTrue($job->run()); $emailMessages = EmailMessage::getAll(); $this->assertEquals(1, count($emailMessages)); $this->assertEquals($emailMessage2->id, $emailMessages[0]->id); }
/** * Given post data and an email message, populate the sender and account on the email message if possible. * Also add message recipients and any attachments. * @param array $postData * @param EmailMessage $emailMessage * @param User $userToSendMessagesFrom * @return boolean */ public static function resolveEmailMessageFromPostData(array &$postData, CreateEmailMessageForm $emailMessageForm, User $userToSendMessagesFrom) { $postVariableName = get_class($emailMessageForm); Yii::app()->emailHelper->loadOutboundSettingsFromUserEmailAccount($userToSendMessagesFrom); $toRecipients = explode(",", $postData[$postVariableName]['recipientsData']['to']); // Not Coding Standard static::attachRecipientsToMessage($toRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_TO); if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'cc') != null) { $ccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['cc']); // Not Coding Standard static::attachRecipientsToMessage($ccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_CC); } if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'bcc') != null) { $bccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['bcc']); // Not Coding Standard static::attachRecipientsToMessage($bccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_BCC); } if (isset($postData['filesIds'])) { static::attachFilesToMessage($postData['filesIds'], $emailMessageForm->getModel()); } $emailAccount = EmailAccount::getByUserAndName($userToSendMessagesFrom); $sender = new EmailMessageSender(); $sender->fromName = Yii::app()->emailHelper->fromName; $sender->fromAddress = Yii::app()->emailHelper->fromAddress; $sender->personOrAccount = $userToSendMessagesFrom; $emailMessageForm->sender = $sender; $emailMessageForm->account = $emailAccount; $emailMessageForm->content->textContent = EmailMessageUtil::resolveTextContent(ArrayUtil::getArrayValue($postData[$postVariableName]['content'], 'htmlContent'), null); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessageForm->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX); return $emailMessageForm; }
/** * Given post data and an email message, populate the sender and account on the email message if possible. * Also add message recipients and any attachments. * @param array $postData * @param CreateEmailMessageForm $emailMessageForm * @param User $userToSendMessagesFrom * @return CreateEmailMessageForm */ public static function resolveEmailMessageFromPostData(array &$postData, CreateEmailMessageForm $emailMessageForm, User $userToSendMessagesFrom) { $postVariableName = get_class($emailMessageForm); $toRecipients = explode(",", $postData[$postVariableName]['recipientsData']['to']); // Not Coding Standard static::attachRecipientsToMessage($toRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_TO); if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'cc') != null) { $ccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['cc']); // Not Coding Standard static::attachRecipientsToMessage($ccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_CC); } if (ArrayUtil::getArrayValue($postData[$postVariableName]['recipientsData'], 'bcc') != null) { $bccRecipients = explode(",", $postData[$postVariableName]['recipientsData']['bcc']); // Not Coding Standard static::attachRecipientsToMessage($bccRecipients, $emailMessageForm->getModel(), EmailMessageRecipient::TYPE_BCC); } if (isset($postData['filesIds'])) { static::attachFilesToMessage($postData['filesIds'], $emailMessageForm->getModel()); } $emailAccount = EmailAccount::getByUserAndName($userToSendMessagesFrom); $sender = new EmailMessageSender(); $sender->fromName = $emailAccount->fromName; $sender->fromAddress = $emailAccount->fromAddress; $sender->personsOrAccounts->add($userToSendMessagesFrom); $emailMessageForm->sender = $sender; $emailMessageForm->account = $emailAccount; $box = EmailBoxUtil::getDefaultEmailBoxByUser($userToSendMessagesFrom); $emailMessageForm->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX); return $emailMessageForm; }
/** * Testing that each model type can render properly and does not throw an exception */ public function testRenderSummaryContentWithEmailMessage() { $super = User::getByUsername('super'); $billy = User::getByUsername('billy'); $this->assertEquals(0, EmailMessage::getCount()); $emailMessage = new EmailMessage(); $emailMessage->owner = BaseControlUserConfigUtil::getUserToRunAs(); $emailMessage->subject = 'My First Email'; //Set sender, and recipient, and content $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My First Message'; $emailContent->htmlContent = 'Some fake HTML content'; $emailMessage->content = $emailContent; //Sending from the system, does not have a 'person'. $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Zurmo System'; $sender->personsOrAccounts->add($super); $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); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); $saved = $emailMessage->save(); $this->assertTrue($saved); $content = ActivitiesUtil::renderSummaryContent($emailMessage, 'someUrl', LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL, 'HomeModule'); $content = ActivitiesUtil::renderSummaryContent($emailMessage, 'someUrl', LatestActivitiesConfigurationForm::OWNED_BY_FILTER_USER, 'HomeModule'); $content = ActivitiesUtil::renderSummaryContent($emailMessage, 'someUrl', LatestActivitiesConfigurationForm::OWNED_BY_FILTER_ALL, 'UserModule'); $content = ActivitiesUtil::renderSummaryContent($emailMessage, 'someUrl', LatestActivitiesConfigurationForm::OWNED_BY_FILTER_USER, 'UserModule'); }
public function testRun() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $outboxFolder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX); $sentFolder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_SENT); $emailMessage = EmailMessageTestHelper::createDraftSystemEmail('My Email Message', $super); $emailMessage->folder = $outboxFolder; $saved = $emailMessage->save(); $this->assertTrue($saved); $emailMessageId = $emailMessage->id; $emailMessage->forget(); unset($emailMessage); $emailMessage2 = EmailMessageTestHelper::createDraftSystemEmail('My Email Message', $super); $emailMessage2->folder = $outboxFolder; $saved = $emailMessage2->save(); $this->assertTrue($saved); $emailMessage2Id = $emailMessage2->id; $emailMessage2->forget(); unset($emailMessage2); $this->assertEquals(2, EmailMessage::getCount()); $job = new ProcessOutboundEmailJob(); $this->assertTrue($job->run()); $emailMessages = EmailMessage::getAll(); $this->assertEquals(2, count($emailMessages)); $emailMessage = EmailMessage::getById($emailMessageId); $this->assertEquals($sentFolder, $emailMessage->folder); $emailMessage2 = EmailMessage::getById($emailMessage2Id); $this->assertEquals($sentFolder, $emailMessage2->folder); }
public static function createDraftSendGridSystemEmail($subject, User $owner) { $emailMessage = new EmailMessage(); $emailMessage->owner = $owner; $emailMessage->subject = $subject; //Set sender, and recipient, and content $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My First Message'; $emailContent->htmlContent = 'Some fake HTML content'; $emailMessage->content = $emailContent; //Sending from the system, does not have a 'person'. $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Zurmo System'; $emailMessage->sender = $sender; //Recipient is billy. $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Billy James'; $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->recipients->add($recipient); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); //Save, at this point the email should be in the draft folder $saved = $emailMessage->save(); if (!$saved) { throw new NotSupportedException(); } return $emailMessage; }
/** * Override to avoid actually sending emails out through transport. * (non-PHPdoc) * @see EmailHelper::sendEmail() */ protected function sendEmail(Mailer $mailer, EmailMessage $emailMessage) { if (!$this->sendEmailThroughTransport) { $emailMessage->error = null; $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_SENT); } else { parent::sendEmail($mailer, $emailMessage); } }
/** * Override to avoid actually sending emails out through transport. * (non-PHPdoc) * @see ZurmoSwiftMailer::sendEmail() */ public function sendEmail() { $emailMessage = $this->emailMessage; $sendEmailThroughTransport = Yii::app()->emailHelper->sendEmailThroughTransport; if (!$sendEmailThroughTransport) { $emailMessage->error = null; $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_SENT); $emailMessage->sendAttempts = $emailMessage->sendAttempts + 1; $emailMessage->save(); } else { parent::sendEmail(); } }
/** * @throws MissingRecipientsForEmailMessageException */ public function process() { $emailTemplate = EmailTemplate::getById((int) $this->emailMessageForm->emailTemplateId); $emailMessage = new EmailMessage(); $emailMessage->owner = $this->triggeredByUser; $emailMessage->subject = $this->resolveEmailTemplateSubjectForModelData($emailTemplate); $emailContent = new EmailMessageContent(); $emailContent->textContent = $this->resolveEmailTemplateTextContentForModelData($emailTemplate); $emailContent->htmlContent = $this->resolveEmailTemplateHtmlContentForModelData($emailTemplate); $emailMessage->content = $emailContent; $emailMessage->sender = $this->resolveSender(); $this->resolveRecipients($emailMessage); if ($emailMessage->recipients->count() == 0) { throw new MissingRecipientsForEmailMessageException(); } $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); Yii::app()->emailHelper->send($emailMessage); }
protected function makeEmailMessage(Contact $contact, $subject = null) { $interval = mt_rand(4, 35) * 86400; if (!isset($subject)) { $subject = 'A test archived sent email'; } //#1 Create Archived - Sent $emailMessage = new EmailMessage(); $emailMessage->setScenario('importModel'); $emailMessage->owner = $contact->owner; $emailMessage->subject = $subject; $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My First Message'; $emailContent->htmlContent = 'Some fake HTML content'; $emailMessage->content = $emailContent; //Sending is current user (super) $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Super User'; $sender->personsOrAccounts->add(Yii::app()->user->userModel); $emailMessage->sender = $sender; //Recipient is BobMessage $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = strval($contact); $recipient->personsOrAccounts->add($contact); $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->recipients->add($recipient); $emailMessage->folder = EmailFolder::getByBoxAndType($this->emailBox, EmailFolder::TYPE_SENT); $emailMessage->createdDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - $interval); $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time() - $interval + mt_rand(0, 3) * 86400); $emailMessage->addPermissions(Group::getByName(Group::EVERYONE_GROUP_NAME), Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER); $saved = $emailMessage->save(); if (!$saved) { throw new FailedToSaveModelException(); } $emailMessage = EmailMessage::getById($emailMessage->id); AllPermissionsOptimizationUtil::securableItemGivenPermissionsForGroup($emailMessage, Group::getByName(Group::EVERYONE_GROUP_NAME)); $emailMessage->save(); return $emailMessage; }
public function testExportRelationAttributes() { $report = new Report(); $report->setType(Report::TYPE_ROWS_AND_COLUMNS); $report->setModuleClassName('EmailMessagesModule'); $report->setFiltersStructure(''); $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = 'A test email'; $emailContent = new EmailMessageContent(); $emailContent->textContent = 'A test text message from Zurmo.'; $emailContent->htmlContent = 'A test text message from Zurmo.'; $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'super'; $sender->personsOrAccounts->add(Yii::app()->user->userModel); $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->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_SENT); $this->assertTrue($emailMessage->save()); $displayAttribute1 = new DisplayAttributeForReportForm('EmailMessagesModule', 'EmailMessage', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute1->setModelAliasUsingTableAliasName('relatedModel'); $displayAttribute1->attributeIndexOrDerivedType = 'sender___User__personsOrAccounts__Inferred___firstName'; $report->addDisplayAttribute($displayAttribute1); $displayAttribute2 = new DisplayAttributeForReportForm('EmailMessagesModule', 'EmailMessage', Report::TYPE_ROWS_AND_COLUMNS); $displayAttribute2->setModelAliasUsingTableAliasName('relatedModel'); $displayAttribute2->attributeIndexOrDerivedType = 'sender___Contact__personsOrAccounts__Inferred___firstName'; $report->addDisplayAttribute($displayAttribute2); $dataProvider = new RowsAndColumnsReportDataProvider($report); $adapter = ReportToExportAdapterFactory::createReportToExportAdapter($report, $dataProvider); $compareHeaderData = array('Sender >> Users >> First Name', 'Sender >> Contacts >> First Name'); $compareRowData = array(array('Clark', '')); $this->assertEquals($compareHeaderData, $adapter->getHeaderData()); $this->assertEquals($compareRowData, $adapter->getData()); }
/** * * (non-PHPdoc) * @see BaseJob::run() */ public function run() { $messageContent = null; $userToSendMessagesFrom = BaseControlUserConfigUtil::getUserToRunAs(); $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = Zurmo::t('EmailMessagesModule', 'A test email from Zurmo', LabelUtil::getTranslationParamsForAllModules()); $emailContent = new EmailMessageContent(); $emailContent->textContent = Zurmo::t('EmailMessagesModule', 'A test text message from Zurmo.', LabelUtil::getTranslationParamsForAllModules()); $emailContent->htmlContent = Zurmo::t('EmailMessagesModule', 'A test text message from Zurmo.', LabelUtil::getTranslationParamsForAllModules()); $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom); $sender->fromName = Yii::app()->emailHelper->resolveFromNameForSystemUser($userToSendMessagesFrom); $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->toAddress = Yii::app()->emailHelper->defaultTestToAddress; $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); $validatedAndSaved = $emailMessage->save(); if (!$validatedAndSaved) { throw new NotSupportedException(); } Yii::app()->emailHelper->sendImmediately($emailMessage); if (!$emailMessage->hasSendError()) { $messageContent .= Zurmo::t('EmailMessagesModule', 'Message successfully sent') . "\n"; return true; } else { $messageContent .= Zurmo::t('EmailMessagesModule', 'Message failed to send') . "\n"; $messageContent .= $emailMessage->error . "\n"; $this->errorMessage = $messageContent; return false; } }
protected static function resolveEmailMessage(EmailTemplate $emailTemplate, Contact $contact = null, $htmlContent, $emailAddress = null) { // TODO: @Shoaibi: Critical: Refactor this and AutoresponderAndCampaignItemsUtil $emailMessage = new EmailMessage(); $emailMessage->subject = $emailTemplate->subject; $emailContent = new EmailMessageContent(); $emailContent->textContent = $emailTemplate->textContent; // we do not need to do : EmailTemplateSerializedDataToHtmlUtil::resolveHtmlByEmailTemplateModel($emailTemplate); // check __set of EmailTemplate. $emailContent->htmlContent = $htmlContent; $emailMessage->content = $emailContent; $emailMessage->sender = static::resolveSender(); static::resolveRecipient($emailMessage, $contact, $emailAddress); $box = EmailBox::resolveAndGetByName(EmailBox::USER_DEFAULT_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); Yii::app()->emailHelper->sendImmediately($emailMessage); $emailMessage->owner = $emailTemplate->owner; $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($emailTemplate); ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($emailMessage, $explicitReadWriteModelPermissions); if (!$emailMessage->save()) { throw new FailedToSaveModelException("Unable to save EmailMessage"); } }
private function createEmailMessage($contact, $emailMessageSentDateTime) { $emailBox = $this->emailBox; $emailMessage = new EmailMessage(); $emailMessage->setScenario('importModel'); $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My First Message'; $emailContent->htmlContent = 'Some fake HTML content'; $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Super User'; $sender->personOrAccount = Yii::app()->user->userModel; $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = strval($contact); $recipient->personOrAccount = $contact; $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = 'A test archived sent email'; $emailMessage->content = $emailContent; $emailMessage->sender = $sender; if (isset($emailMessageSentDateTime)) { $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(strtotime($emailMessageSentDateTime)); $emailMessage->createdDateTime = $emailMessage->sentDateTime; } $emailMessage->folder = EmailFolder::getByBoxAndType($emailBox, EmailFolder::TYPE_ARCHIVED); $emailMessage->recipients->add($recipient); return $emailMessage; }
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; }
/** * Send task email * @param Notification $notification * @param TaskNotificationRules $rule * @param string $action */ protected static function sendTaskEmail(Notification $notification, TaskNotificationRules $rule, $action) { assert('is_string($action)'); if ($notification->owner->primaryEmail->emailAddress !== null && !UserConfigurationFormAdapter::resolveAndGetValue($notification->owner, 'turnOffEmailNotifications')) { $emailMessage = static::makeEmailMessage($notification, $rule, $action); $emailMessage->content = static::makeEmailContent($notification); $emailMessage->sender = static::makeSender(); $emailMessage->recipients->add(static::makeRecipient($notification)); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); try { Yii::app()->emailHelper->send($emailMessage); } catch (CException $e) { //Not sure what to do yet when catching an exception here. Currently ignoring gracefully. } } }
/** * @param User $senderPerson * @param array $recipients * @param string $subject * @param EmailMessageContent $content */ public static function resolveAndSendEmail($senderPerson, $recipients, $subject, $content) { assert('$senderPerson instanceof User'); assert('is_array($recipients)'); assert('is_string($subject)'); assert('$content instanceof EmailMessageContent'); if (count($recipients) == 0) { return; } $userToSendMessagesFrom = $senderPerson; $emailMessage = new EmailMessage(); $emailMessage->owner = $senderPerson; $emailMessage->subject = $subject; $emailMessage->content = $content; $sender = new EmailMessageSender(); $sender->fromAddress = Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom); $sender->fromName = strval($userToSendMessagesFrom); $sender->personsOrAccounts->add($userToSendMessagesFrom); $emailMessage->sender = $sender; foreach ($recipients as $recipientPerson) { $recipient = new EmailMessageRecipient(); $recipient->toAddress = $recipientPerson->primaryEmail->emailAddress; $recipient->toName = strval($recipientPerson); $recipient->type = EmailMessageRecipient::TYPE_TO; $recipient->personsOrAccounts->add($recipientPerson); $emailMessage->recipients->add($recipient); } $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); Yii::app()->emailHelper->send($emailMessage); }
/** * 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 static function resolveEmailMessage($textContent, $htmlContent, Autoresponder $autoresponder, Contact $contact) { $marketingList = $autoresponder->marketingList; $emailMessage = new EmailMessage(); $emailMessage->owner = $marketingList->owner; $emailMessage->subject = $autoresponder->subject; $emailContent = new EmailMessageContent(); $emailContent->textContent = $textContent; $emailContent->htmlContent = $htmlContent; $emailMessage->content = $emailContent; $emailMessage->sender = static::resolveSender($marketingList); static::resolveRecipient($emailMessage, $contact); if ($emailMessage->recipients->count() == 0) { throw new MissingRecipientsForEmailMessageException(); } $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); Yii::app()->emailHelper->send($emailMessage); return $emailMessage; }
/** * @depends testIsSent */ public function testHasFailedToSend() { $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 09'); $campaign = CampaignTestHelper::createCampaign('campaign 08', 'subject 08', 'text 08', 'html 08', null, null, null, null, null, null, $marketingList); $this->assertNotNull($campaign); $contact = ContactTestHelper::createContactByNameForOwner('campaignContact 09', Yii::app()->user->userModel); MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact); $email = new Email(); $email->emailAddress = '*****@*****.**'; $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $campaignItem = CampaignItemTestHelper::createCampaignItem(0, $campaign, $contact); $this->assertNotNull($campaignItem); $this->assertFalse($campaignItem->hasFailedToSend()); $this->processDueItem($campaignItem); $this->assertFalse($campaignItem->hasFailedToSend()); // Folder is outbox at the end of processDueItem and hence it fails $box = EmailBox::resolveAndGetByName(EmailBox::CAMPAIGNS_NAME); $campaignItem->emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_FAILURE); $this->assertTrue($campaignItem->unrestrictedSave()); $this->assertTrue($campaignItem->hasFailedToSend()); }
/** * Special method to load archived, but unmatched emails. This is for use with the @see ArchivedEmailMatchingListView */ public function actionLoadUnmatchedSampler() { if (!Group::isUserASuperAdministrator(Yii::app()->user->userModel)) { throw new NotSupportedException(); } $box = EmailBoxUtil::getDefaultEmailBoxByUser(Yii::app()->user->userModel); //#1 Create Archived - Sent $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = 'A test unmatched archived sent email'; $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My First Message'; $emailContent->htmlContent = 'Some fake HTML content'; $emailMessage->content = $emailContent; //Sending is current user (super) $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Super User'; $sender->personOrAccount = Yii::app()->user->userModel; $emailMessage->sender = $sender; //Recipient is BobMessage $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Bobby Bobson'; $recipient->type = EmailMessageRecipient::TYPE_TO; $emailMessage->recipients->add($recipient); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED); $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); $saved = $emailMessage->save(); if (!$saved) { throw new NotSupportedException(); } //#2 Create Archived - Received $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = 'A test unmatched archived received email'; $emailContent = new EmailMessageContent(); $emailContent->textContent = 'My Second Message'; $emailContent->htmlContent = 'Some fake HTML content'; $emailMessage->content = $emailContent; //Sending is current user (super) $sender = new EmailMessageSender(); $sender->fromAddress = '*****@*****.**'; $sender->fromName = 'Bobby Bobson'; $emailMessage->sender = $sender; //Recipient is BobMessage $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Super User'; $recipient->type = EmailMessageRecipient::TYPE_TO; $recipient->personOrAccount = Yii::app()->user->userModel; $emailMessage->recipients->add($recipient); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED); $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); $saved = $emailMessage->save(); if (!$saved) { throw new NotSupportedException(); } }
/** * Create new model * @param $data * @return ApiResult * @throws ApiException */ protected function processCreate($data) { try { $model = new EmailMessage(); $emailMessage = $this->getImapMessageFromEmailData($data); if (isset($data['sentFrom'])) { unset($data['sentFrom']); } if (isset($data['recipients'])) { unset($data['recipients']); } if (isset($data['attachments'])) { unset($data['attachments']); } if (isset($data['owner']['id'])) { try { $emailOwner = User::getById((int) $data['owner']['id']); } catch (CException $e) { $message = Zurmo::t('ZurmoModule', 'Owner not found.'); throw new ApiException($message); } } else { $emailOwner = Yii::app()->user->userModel; } $emailSenderOrRecipientEmailFoundInSystem = false; $userCanAccessContacts = RightsUtil::canUserAccessModule('ContactsModule', $emailOwner); $userCanAccessLeads = RightsUtil::canUserAccessModule('LeadsModule', $emailOwner); $userCanAccessAccounts = RightsUtil::canUserAccessModule('AccountsModule', $emailOwner); if (!empty($emailMessage->fromEmail)) { $senderInfo['email'] = $emailMessage->fromEmail; $senderInfo['name'] = $emailMessage->fromName; $sender = EmailArchivingUtil::createEmailMessageSender($senderInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts); if ($sender->personsOrAccounts->count() > 0) { $emailSenderOrRecipientEmailFoundInSystem = true; } } else { $message = Zurmo::t('ZurmoModule', 'Sender not found.'); throw new ApiException($message); } try { $recipientsInfo = EmailArchivingUtil::resolveEmailRecipientsFromEmailMessage($emailMessage); } catch (NotSupportedException $exception) { $message = Zurmo::t('ZurmoModule', 'No recipients found.'); throw new ApiException($message); } $emailRecipientFoundInSystem = false; foreach ($recipientsInfo as $recipientInfo) { $recipient = EmailArchivingUtil::createEmailMessageRecipient($recipientInfo, $userCanAccessContacts, $userCanAccessLeads, $userCanAccessAccounts); $model->recipients->add($recipient); // Check if at least one recipient email can't be found in Contacts, Leads, Account and User emails // so we will save email message in EmailFolder::TYPE_ARCHIVED_UNMATCHED folder, and user will // be able to match emails with items(Contacts, Accounts...) emails in systems if ($recipient->personsOrAccounts->count() > 0) { $emailRecipientFoundInSystem = true; } } if ($emailSenderOrRecipientEmailFoundInSystem == true) { $emailSenderOrRecipientEmailFoundInSystem = $emailRecipientFoundInSystem; } if ($emailOwner instanceof User) { $box = EmailBoxUtil::getDefaultEmailBoxByUser($emailOwner); } else { $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); } if (!$emailSenderOrRecipientEmailFoundInSystem) { $model->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED_UNMATCHED); $this->sendArchivedUnmatchedNotificationToEmailOwner($emailOwner); } else { $model->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_ARCHIVED); } $model->sender = $sender; if (isset($data['textContent']) || isset($data['htmlContent'])) { $emailContent = new EmailMessageContent(); if (isset($data['textContent'])) { $emailContent->textContent = $data['textContent']; } else { $emailContent->textContent = ''; } if (isset($data['htmlContent'])) { $emailContent->htmlContent = $data['htmlContent']; } else { $emailContent->htmlContent = ''; } $model->content = $emailContent; unset($data['textContent']); unset($data['htmlContent']); } else { $message = Zurmo::t('ZurmoModule', 'No email content found.'); throw new ApiException($message); } if (!empty($emailMessage->attachments)) { foreach ($emailMessage->attachments as $attachment) { if (isset($attachment['filename']) && isset($attachment['attachment'])) { $file = EmailArchivingUtil::createEmailAttachment($attachment, true); if ($file instanceof FileModel) { $model->files->add($file); } } } } if (!isset($data['sentDateTime'])) { $model->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); } $this->setModelScenarioFromData($model, $data); $model = $this->attemptToSaveModelFromData($model, $data, null, false); $id = $model->id; $model->forget(); if (!count($model->getErrors())) { $data = array('id' => $id); $result = new ApiResult(ApiResponse::STATUS_SUCCESS, $data, null, null); } else { $errors = $model->getErrors(); $message = Zurmo::t('ZurmoModule', 'Model was not created.'); $result = new ApiResult(ApiResponse::STATUS_FAILURE, null, $message, $errors); } } catch (Exception $e) { $message = $e->getMessage(); throw new ApiException($message); } return $result; }
/** * Send an email message. This will queue up the email to be sent by the queue sending process. If you want to * send immediately, consider using @sendImmediately * @param EmailMessage $emailMessage * @param bool $useSQL * @param bool $validate * @return bool|void * @throws FailedToSaveModelException * @throws NotFoundException * @throws NotSupportedException */ public function send(EmailMessage &$emailMessage, $useSQL = false, $validate = true) { static::isValidFolderType($emailMessage); $folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_OUTBOX); $saved = static::updateFolderForEmailMessage($emailMessage, $useSQL, $folder, $validate); if ($saved) { Yii::app()->jobQueue->add('ProcessOutboundEmail'); } return $saved; }
protected static function attemptToMatchAndSaveLeadOrContact($emailMessage, $type, $emailMessageId) { assert('$type == "Contact" || $type == "Lead"'); assert('is_int($emailMessageId)'); if (isset($_POST[$type])) { if (isset($_POST['ajax']) && $_POST['ajax'] === strtolower($type) . '-inline-create-form-' . $emailMessageId) { $contact = new Contact(); $contact->setAttributes($_POST[$type][$emailMessageId]); $contact->validate(); $errorData = ZurmoActiveForm::makeErrorsDataAndResolveForOwnedModelAttributes($contact); echo CJSON::encode($errorData); Yii::app()->end(0, false); } else { $contact = new Contact(); $contact->setAttributes($_POST[$type][$emailMessageId]); if (!$contact->save()) { throw new FailedToSaveModelException(); } ArchivedEmailMatchingUtil::resolveContactToSenderOrRecipient($emailMessage, $contact); $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_ARCHIVED); if (!$emailMessage->save()) { throw new FailedToSaveModelException(); } } } }
/** * @depends testSendRealEmail */ public function testTooManySendAttemptsResultingInFailure() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) { //add a message in the outbox_error folder. $emailMessage = EmailMessageTestHelper::createDraftSystemEmail('a test email 2', $this->user); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->sendAttempts = 5; $emailMessage->save(); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(7, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(7, Yii::app()->emailHelper->getSentCount()); $this->assertTrue($emailMessage->folder->isSame(EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_FAILURE))); } else { $this->markTestSkipped(); } }
protected function sendEmail(Mailer $mailer, EmailMessage $emailMessage) { try { $emailMessage->sendAttempts = $emailMessage->sendAttempts + 1; $acceptedRecipients = $mailer->send(); // Code below is quick fix, we need to think about better solution // Here is related PT story: https://www.pivotaltracker.com/projects/380027#!/stories/45841753 //if ($acceptedRecipients != $emailMessage->recipients->count()) if ($acceptedRecipients <= 0) { $content = Zurmo::t('EmailMessagesModule', 'Response from Server') . "\n"; foreach ($mailer->getSendResponseLog() as $logMessage) { $content .= $logMessage . "\n"; } $emailMessageSendError = new EmailMessageSendError(); $data = array(); $data['message'] = $content; $emailMessageSendError->serializedData = serialize($data); $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->error = $emailMessageSendError; } else { $emailMessage->error = null; $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_SENT); $emailMessage->sentDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time()); } } catch (OutboundEmailSendException $e) { $emailMessageSendError = new EmailMessageSendError(); $data = array(); $data['code'] = $e->getCode(); $data['message'] = $e->getMessage(); $data['trace'] = $e->getPrevious(); $emailMessageSendError->serializedData = serialize($data); $emailMessage->folder = EmailFolder::getByBoxAndType($emailMessage->folder->emailBox, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->error = $emailMessageSendError; } }
/** * @param Conversation $conversation * @param $person */ public static function sendEmailInviteToParticipant(Conversation $conversation, $person) { assert('$conversation->id > 0'); assert('$person instanceof User || $person instanceof Contact'); if ($person->primaryEmail->emailAddress !== null) { $userToSendMessagesFrom = $conversation->owner; $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = Zurmo::t('ConversationsModule', 'You have been invited to participate in a conversation'); $emailContent = new EmailMessageContent(); $emailContent->textContent = EmailNotificationUtil::resolveNotificationTextTemplate(static::getParticipantInviteEmailTextContent($conversation)); $emailContent->htmlContent = EmailNotificationUtil::resolveNotificationHtmlTemplate(static::getParticipantInviteEmailHtmlContent($conversation)); $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom); $sender->fromName = strval($userToSendMessagesFrom); $sender->personsOrAccounts->add($userToSendMessagesFrom); $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->toAddress = $person->primaryEmail->emailAddress; $recipient->toName = strval($person); $recipient->type = EmailMessageRecipient::TYPE_TO; $recipient->personsOrAccounts->add($person); $emailMessage->recipients->add($recipient); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); try { Yii::app()->emailHelper->send($emailMessage); } catch (CException $e) { //Not sure what to do yet when catching an exception here. Currently ignoring gracefully. } } }
/** * @depends testSend */ public function testSendQueued() { ZurmoConfigurationUtil::setByModuleName('SendGridModule', 'enableSendgrid', true); $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; //add a message in the outbox_error folder. $emailMessage = SendGridTestHelper::createDraftSendGridSystemEmail('a test email 2', $super); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->save(); $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(2, Yii::app()->emailHelper->getSentCount()); //add a message in the outbox folder. $emailMessage = SendGridTestHelper::createDraftSendGridSystemEmail('a test email 3', $super); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX); $emailMessage->save(); //add a message in the outbox_error folder. $emailMessage = SendGridTestHelper::createDraftSendGridSystemEmail('a test email 4', $super); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->save(); //add a message in the outbox_error folder. $emailMessage = SendGridTestHelper::createDraftSendGridSystemEmail('a test email 5', $super); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR); $emailMessage->save(); $this->assertEquals(3, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(2, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(1); $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(3, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(2); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(5, Yii::app()->emailHelper->getSentCount()); }
/** * Send a test email. * $from('name' => 'fromName', 'address' => 'fromAddress') * @param EmailHelper $emailHelper * @param Array $from * @param string $toAddress */ public static function sendTestEmail(EmailHelper $emailHelper, array $from, $toAddress) { assert('is_string($from["name"])'); assert('is_string($from["address"])'); $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = Zurmo::t('EmailMessagesModule', 'A test email from Zurmo', LabelUtil::getTranslationParamsForAllModules()); $emailContent = new EmailMessageContent(); $emailContent->textContent = EmailNotificationUtil::resolveNotificationTextTemplate(Zurmo::t('EmailMessagesModule', 'A test text message from Zurmo.', LabelUtil::getTranslationParamsForAllModules())); $emailContent->htmlContent = EmailNotificationUtil::resolveNotificationHtmlTemplate(Zurmo::t('EmailMessagesModule', 'A test text message from Zurmo.', LabelUtil::getTranslationParamsForAllModules())); $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = $from['address']; $sender->fromName = $from['name']; $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) { $emailHelper->sendImmediately($emailMessage); } return $emailMessage; }
protected static function sendEmail(Notification $notification) { if ($notification->owner->primaryEmail->emailAddress !== null && !UserConfigurationFormAdapter::resolveAndGetValue($notification->owner, 'turnOffEmailNotifications')) { $userToSendMessagesFrom = BaseControlUserConfigUtil::getUserToRunAs(); $emailMessage = new EmailMessage(); $emailMessage->owner = Yii::app()->user->userModel; $emailMessage->subject = strval($notification); $emailContent = new EmailMessageContent(); $emailContent->textContent = EmailNotificationUtil::resolveNotificationTextTemplate($notification->notificationMessage->textContent); $emailContent->htmlContent = EmailNotificationUtil::resolveNotificationHtmlTemplate($notification->notificationMessage->htmlContent); $emailMessage->content = $emailContent; $sender = new EmailMessageSender(); $sender->fromAddress = Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom); $sender->fromName = strval($userToSendMessagesFrom); $emailMessage->sender = $sender; $recipient = new EmailMessageRecipient(); $recipient->toAddress = $notification->owner->primaryEmail->emailAddress; $recipient->toName = strval($notification->owner); $recipient->type = EmailMessageRecipient::TYPE_TO; $recipient->personsOrAccounts->add($notification->owner); $emailMessage->recipients->add($recipient); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_DRAFT); if (!$emailMessage->save()) { throw new FailedToSaveModelException(); } try { Yii::app()->emailHelper->sendImmediately($emailMessage); } catch (CException $e) { //Not sure what to do yet when catching an exception here. Currently ignoring gracefully. } } }