public function testSendSystemEmail() { if (!EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) { $this->markTestSkipped(Zurmo::t('EmailMessagesModule', 'Test email settings are not configured in perInstanceTest.php file.')); } $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; Yii::app()->imap->connect(); EmailMessage::deleteAll(); // Expunge all emails from dropbox Yii::app()->imap->deleteMessages(true); $this->assertEquals(0, EmailMessage::getCount()); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $subject = "System Message"; $textMessage = "System message content."; $htmlMessage = "<strong>System</strong> message content."; EmailMessageHelper::sendSystemEmail($subject, array(Yii::app()->imap->imapUsername), $textMessage, $htmlMessage); sleep(30); Yii::app()->imap->connect(); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(1, $imapStats->Nmsgs); $this->assertEquals(1, EmailMessage::getCount()); $emailMessages = EmailMessage::getAll(); $emailMessage = $emailMessages[0]; $this->assertEquals('System Message', $emailMessage->subject); $this->assertEquals('System message content.', trim($emailMessage->content->textContent)); $this->assertEquals('<strong>System</strong> message content.', trim($emailMessage->content->htmlContent)); $this->assertEquals(1, count($emailMessage->recipients)); foreach ($emailMessage->recipients as $recipient) { $this->assertEquals($recipient->toAddress, Yii::app()->imap->imapUsername); $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipient->type); } }
/** * @covers ZurmoSendGridMailer::sendTestEmail * @covers ZurmoSendGridMailer::sendEmail */ public function testSendEmail() { $sendGridEmailAccount = new SendGridEmailAccount(); $sendGridEmailAccount->apiUsername = static::$apiUsername; $sendGridEmailAccount->apiPassword = ZurmoPasswordSecurityUtil::encrypt(static::$apiPassword); $from = array('name' => 'Test User', 'address' => '*****@*****.**'); $emailMessage = EmailMessageHelper::processAndCreateTestEmailMessage($from, static::$testEmailAddress); $mailer = new ZurmoSendGridMailer($emailMessage, $sendGridEmailAccount); $emailMessage = $mailer->sendTestEmail(true); $this->assertEquals('EmailMessage', get_class($emailMessage)); $this->assertEquals(EmailFolder::TYPE_SENT, $emailMessage->folder->type); }
/** * * (non-PHPdoc) * @see BaseJob::run() */ public function run() { $messageContent = null; $userToSendMessagesFrom = BaseControlUserConfigUtil::getUserToRunAs(); $from = array('name' => Yii::app()->emailHelper->resolveFromNameForSystemUser($userToSendMessagesFrom), 'address' => Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom)); $emailMessage = EmailMessageHelper::processAndCreateTestEmailMessage($from, Yii::app()->emailHelper->defaultTestToAddress); $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; } }
/** * Send Test Message * @param SendGridWebApiConfigurationForm $configurationForm * @param string $fromNameToSendMessagesFrom * @param string $fromAddressToSendMessagesFrom */ public static function sendTestMessage($configurationForm, $fromNameToSendMessagesFrom = null, $fromAddressToSendMessagesFrom = null) { if ($configurationForm->aTestToAddress != null) { $sendGridEmailAccount = new SendGridEmailAccount(); $sendGridEmailAccount->apiUsername = $configurationForm->username; $sendGridEmailAccount->apiPassword = ZurmoPasswordSecurityUtil::encrypt($configurationForm->password); $isUser = false; if ($fromNameToSendMessagesFrom != null && $fromAddressToSendMessagesFrom != null) { $isUser = true; $from = array('name' => $fromNameToSendMessagesFrom, 'address' => $fromAddressToSendMessagesFrom); } else { $user = BaseControlUserConfigUtil::getUserToRunAs(); $userToSendMessagesFrom = User::getById((int) $user->id); $from = array('name' => Yii::app()->emailHelper->resolveFromNameForSystemUser($userToSendMessagesFrom), 'address' => Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom)); } $emailMessage = EmailMessageHelper::processAndCreateTestEmailMessage($from, $configurationForm->aTestToAddress); $mailer = new ZurmoSendGridMailer($emailMessage, $sendGridEmailAccount); $emailMessage = $mailer->sendTestEmail($isUser); $messageContent = EmailHelper::prepareMessageContent($emailMessage); } else { $messageContent = Zurmo::t('EmailMessagesModule', 'A test email address must be entered before you can send a test email.') . "\n"; } return $messageContent; }
public function run(User $userToSendTo, $messageLogger) { $emailMessage = EmailMessageHelper::sendTestEmailFromUser(Yii::app()->emailHelper, Yii::app()->user->userModel, Yii::app()->user->userModel->primaryEmail->emailAddress); $messageLogger->addInfoMessage('Sending test SMTP setup message'); }
/** * Assumes before calling this, the outbound settings have been validated in the form. * Todo: When new user interface is complete, this will be re-worked to be on page instead of modal. */ public function actionSendTestMessage() { $configurationForm = EmailSmtpConfigurationFormAdapter::makeFormFromGlobalConfiguration(); $postVariableName = get_class($configurationForm); if (isset($_POST[$postVariableName]) || isset($_POST['UserEmailConfigurationForm'])) { if (isset($_POST[$postVariableName])) { $configurationForm->setAttributes($_POST[$postVariableName]); } else { //Check for sendgrid if ($_POST['UserEmailConfigurationForm']['useCustomOutboundSettings'] == EmailMessageUtil::OUTBOUND_PERSONAL_SENDGRID_SETTINGS) { $this->processSendTestMessageForSendGrid(); } else { $configurationForm->host = $_POST['UserEmailConfigurationForm']['outboundHost']; $configurationForm->port = $_POST['UserEmailConfigurationForm']['outboundPort']; $configurationForm->username = $_POST['UserEmailConfigurationForm']['outboundUsername']; $configurationForm->password = $_POST['UserEmailConfigurationForm']['outboundPassword']; $configurationForm->security = $_POST['UserEmailConfigurationForm']['outboundSecurity']; $configurationForm->aTestToAddress = $_POST['UserEmailConfigurationForm']['aTestToAddress']; $fromNameToSendMessagesFrom = $_POST['UserEmailConfigurationForm']['fromName']; $fromAddressToSendMessagesFrom = $_POST['UserEmailConfigurationForm']['fromAddress']; } } if ($configurationForm->aTestToAddress != null) { $emailAccount = new EmailAccount(); $emailAccount->outboundHost = $configurationForm->host; $emailAccount->outboundPort = $configurationForm->port; $emailAccount->outboundUsername = $configurationForm->username; $emailAccount->outboundPassword = ZurmoPasswordSecurityUtil::encrypt($configurationForm->password); $emailAccount->outboundSecurity = $configurationForm->security; $isUser = false; if (isset($fromNameToSendMessagesFrom) && isset($fromAddressToSendMessagesFrom)) { $isUser = true; $from = array('name' => $fromNameToSendMessagesFrom, 'address' => $fromAddressToSendMessagesFrom); } else { $user = BaseControlUserConfigUtil::getUserToRunAs(); $userToSendMessagesFrom = User::getById((int) $user->id); $from = array('name' => Yii::app()->emailHelper->resolveFromNameForSystemUser($userToSendMessagesFrom), 'address' => Yii::app()->emailHelper->resolveFromAddressByUser($userToSendMessagesFrom)); } $emailMessage = EmailMessageHelper::processAndCreateEmailMessage($from, $configurationForm->aTestToAddress); $mailer = new ZurmoSwiftMailer($emailMessage, $emailAccount); $emailMessage = $mailer->sendTestEmail($isUser); $messageContent = EmailHelper::prepareMessageContent($emailMessage); } else { $messageContent = Zurmo::t('EmailMessagesModule', 'A test email address must be entered before you can send a test email.') . "\n"; } Yii::app()->getClientScript()->setToAjaxMode(); $messageView = new TestConnectionView($messageContent); $view = new ModalView($this, $messageView); echo $view->render(); } else { throw new NotSupportedException(); } }
public function testResolveMailerWithItemsData() { $contact = ContactTestHelper::createContactByNameForOwner('mailercontact', $this->user); $campaignItem = new CampaignItem(); $campaignItem->processed = 0; $campaignItem->contact = $contact; $this->assertTrue($campaignItem->unrestrictedSave()); ZurmoConfigurationUtil::setByModuleName('MarketingModule', 'UseAutoresponderOrCampaignOwnerMailSettings', true); ZurmoConfigurationUtil::setByModuleName('SendGridModule', 'enableSendgrid', true); $emailMessage = EmailMessageHelper::processAndCreateTestEmailMessage(array('name' => 'Test User', 'address' => '*****@*****.**'), '*****@*****.**'); $emailMessage->owner = static::$bothSGandCstmUser; $this->assertTrue($emailMessage->save()); $campaignItem->emailMessage = $emailMessage; $this->assertTrue($campaignItem->unrestrictedSave()); //user sendgrid, should return personal sg instance $mailerFactory = new ZurmoMailerFactory($emailMessage); $mailer = $mailerFactory->resolveMailer(); $this->assertTrue($mailer instanceof ZurmoSendGridMailer); $this->assertNotNull($mailer->getEmailAccount()); //Uncheck autoresponder/camapign settings for owner, should return global sg instance ZurmoConfigurationUtil::setByModuleName('MarketingModule', 'UseAutoresponderOrCampaignOwnerMailSettings', false); $mailerFactory = new ZurmoMailerFactory($emailMessage); $mailer = $mailerFactory->resolveMailer(); $this->assertTrue($mailer instanceof ZurmoSendGridMailer); $this->assertNull($mailer->getEmailAccount()); ZurmoConfigurationUtil::setByModuleName('MarketingModule', 'UseAutoresponderOrCampaignOwnerMailSettings', true); $emailMessage->owner = static::$usercstmsmtp; assert($emailMessage->save()); // Not Coding Standard $mailerFactory = new ZurmoMailerFactory($emailMessage); $mailer = $mailerFactory->resolveMailer(); $this->assertTrue($mailer instanceof ZurmoSwiftMailer); $this->assertNotNull($mailer->getEmailAccount()); $this->assertEquals('smtp', $mailer->getEmailMessage()->mailerType); $this->assertEquals('personal', $mailer->getEmailMessage()->mailerSettings); }
/** * Resolve system message to be sent, and send it * @param string $messageType * @param ImapMessage $originalMessage * @return boolean * @throws NotSupportedException */ protected function resolveMessageSubjectAndContentAndSendSystemMessage($messageType, $originalMessage) { $sendNotification = false; switch ($messageType) { case "OwnerNotExist": $subject = Zurmo::t('EmailMessagesModule', 'Invalid email address'); $textContent = Zurmo::t('EmailMessagesModule', 'Email address does not exist in system') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email address does not exist in system') . "<br\\><br\\>" . $originalMessage->htmlBody; $sendNotification = true; break; case "SenderNotExtracted": $subject = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message"); $textContent = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message") . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message") . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "RecipientNotExtracted": $subject = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message"); $textContent = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message") . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message") . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "EmailMessageNotValidated": $subject = Zurmo::t('EmailMessagesModule', 'Email message could not be validated'); $textContent = Zurmo::t('EmailMessagesModule', 'Email message could not be validated') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email message could not be validated') . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "EmailMessageNotSaved": $subject = Zurmo::t('EmailMessagesModule', 'Email message could not be saved'); $textContent = Zurmo::t('EmailMessagesModule', 'Email message could not be saved') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email message could not be saved') . "<br\\><br\\>" . $originalMessage->htmlBody; break; default: throw new NotSupportedException(); } if ($sendNotification) { $notificationMessage = new NotificationMessage(); $notificationMessage->textContent = $textContent; $notificationMessage->htmlContent = DataUtil::purifyHtml($htmlContent); $rules = new EmailMessageOwnerNotExistNotificationRules(); NotificationsUtil::submit($notificationMessage, $rules); } else { return EmailMessageHelper::sendSystemEmail($subject, array($originalMessage->fromEmail), $textContent, $htmlContent); } }
/** * Assumes before calling this, the outbound settings have been validated in the form. * Todo: When new user interface is complete, this will be re-worked to be on page instead of modal. */ public function actionSendTestMessage() { $configurationForm = EmailSmtpConfigurationFormAdapter::makeFormFromGlobalConfiguration(); $postVariableName = get_class($configurationForm); if (isset($_POST[$postVariableName]) || isset($_POST['UserEmailConfigurationForm'])) { if (isset($_POST[$postVariableName])) { $configurationForm->setAttributes($_POST[$postVariableName]); } else { $configurationForm->host = $_POST['UserEmailConfigurationForm']['outboundHost']; $configurationForm->port = $_POST['UserEmailConfigurationForm']['outboundPort']; $configurationForm->username = $_POST['UserEmailConfigurationForm']['outboundUsername']; $configurationForm->password = $_POST['UserEmailConfigurationForm']['outboundPassword']; $configurationForm->security = $_POST['UserEmailConfigurationForm']['outboundSecurity']; $configurationForm->aTestToAddress = $_POST['UserEmailConfigurationForm']['aTestToAddress']; $fromNameToSendMessagesFrom = $_POST['UserEmailConfigurationForm']['fromName']; $fromAddressToSendMessagesFrom = $_POST['UserEmailConfigurationForm']['fromAddress']; } if ($configurationForm->aTestToAddress != null) { $emailHelper = new EmailHelper(); $emailHelper->loadDefaultFromAndToAddresses(); $emailHelper->outboundHost = $configurationForm->host; $emailHelper->outboundPort = $configurationForm->port; $emailHelper->outboundUsername = $configurationForm->username; $emailHelper->outboundPassword = $configurationForm->password; $emailHelper->outboundSecurity = $configurationForm->security; if (isset($fromNameToSendMessagesFrom) && isset($fromAddressToSendMessagesFrom)) { $from = array('name' => $fromNameToSendMessagesFrom, 'address' => $fromAddressToSendMessagesFrom); $emailMessage = EmailMessageHelper::sendTestEmail($emailHelper, $from, $configurationForm->aTestToAddress); } else { $user = BaseControlUserConfigUtil::getUserToRunAs(); $userToSendMessagesFrom = User::getById((int) $user->id); $emailMessage = EmailMessageHelper::sendTestEmailFromUser($emailHelper, $userToSendMessagesFrom, $configurationForm->aTestToAddress); } $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"; } } } } } } else { $messageContent = Zurmo::t('EmailMessagesModule', 'A test email address must be entered before you can send a test email.') . "\n"; } Yii::app()->getClientScript()->setToAjaxMode(); $messageView = new TestConnectionView($messageContent); $view = new ModalView($this, $messageView); echo $view->render(); } else { throw new NotSupportedException(); } }
/** * Resolve system message to be sent, and send it * @param string $messageType * @param ImapMessage $originalMessage * @return boolean * @throws NotSupportedException */ protected function resolveMessageSubjectAndContentAndSendSystemMessage($messageType, $originalMessage) { switch ($messageType) { case "OwnerNotExist": $subject = Zurmo::t('EmailMessagesModule', 'Invalid email address'); $textContent = Zurmo::t('EmailMessagesModule', 'Email address does not exist in system') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email address does not exist in system') . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "SenderNotExtracted": $subject = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message"); $textContent = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message") . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', "Sender info can't be extracted from email message") . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "RecipientNotExtracted": $subject = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message"); $textContent = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message") . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', "Recipient info can't be extracted from email message") . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "EmailMessageNotValidated": $subject = Zurmo::t('EmailMessagesModule', 'Email message could not be validated'); $textContent = Zurmo::t('EmailMessagesModule', 'Email message could not be validated') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email message could not be validated') . "<br\\><br\\>" . $originalMessage->htmlBody; break; case "EmailMessageNotSaved": $subject = Zurmo::t('EmailMessagesModule', 'Email message could not be saved'); $textContent = Zurmo::t('EmailMessagesModule', 'Email message could not be saved') . "\n\n" . $originalMessage->textBody; $htmlContent = Zurmo::t('EmailMessagesModule', 'Email message could not be saved') . "<br\\><br\\>" . $originalMessage->htmlBody; break; default: throw new NotSupportedException(); } return EmailMessageHelper::sendSystemEmail($subject, array($originalMessage->fromEmail), $textContent, $htmlContent); }