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);
     }
 }
예제 #9
0
 /**
  * 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();
     }
 }
예제 #10
0
 /**
  * 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);
 }