public function testSendMessagePopulatesEmailAccountSettings() { $jane = User::getByUsername('jane'); Yii::app()->user->userModel = $jane; $emailHelper = new EmailHelper(); EmailMessageTestHelper::createEmailAccount($jane); $emailAccount = EmailAccount::getByUserAndName($jane); $emailAccount->useCustomOutboundSettings = EmailMessageUtil::OUTBOUND_PERSONAL_SMTP_SETTINGS; $emailAccount->outboundType = 'abc'; $emailAccount->outboundPort = 11; $emailAccount->outboundHost = 'dumb.domain'; $emailAccount->outboundUsername = '******'; $emailAccount->outboundPassword = '******'; $emailAccount->outboundSecurity = 'ssl'; $emailAccount->save(); $emailMessage = EmailMessageTestHelper::createOutboxEmail($jane, 'Test email', 'Raw content', 'Html content', 'Zurmo', Yii::app()->emailHelper->outboundUsername, 'John Doe', Yii::app()->params['emailTestAccounts']['userImapSettings']['imapUsername']); $emailMessage->account = $emailAccount; $emailMessage->save(); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(); $job = new ProcessOutboundEmailJob(); $this->assertTrue($job->run()); //Since user email account has invalid settings message is not sent $this->assertContains('Connection could not be established with host dumb.domain', strval($emailMessage->error)); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); }
/** * @depends testSend */ public function testSendRealEmail() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; Yii::app()->emailHelper->sendEmailThroughTransport = true; Yii::app()->imap->imapHost = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapHost']; Yii::app()->imap->imapUsername = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapUsername']; Yii::app()->imap->imapPassword = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapPassword']; Yii::app()->imap->imapPort = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapPort']; Yii::app()->imap->imapSSL = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapSSL']; Yii::app()->imap->imapFolder = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapFolder']; Yii::app()->imap->setInboundSettings(); Yii::app()->imap->init(); Yii::app()->emailHelper->outboundHost = Yii::app()->params['emailTestAccounts']['smtpSettings']['outboundHost']; Yii::app()->emailHelper->outboundPort = Yii::app()->params['emailTestAccounts']['smtpSettings']['outboundPort']; Yii::app()->emailHelper->outboundUsername = Yii::app()->params['emailTestAccounts']['smtpSettings']['outboundUsername']; Yii::app()->emailHelper->outboundPassword = Yii::app()->params['emailTestAccounts']['smtpSettings']['outboundPassword']; Yii::app()->emailHelper->outboundSecurity = Yii::app()->params['emailTestAccounts']['smtpSettings']['outboundSecurity']; Yii::app()->emailHelper->sendEmailThroughTransport = true; Yii::app()->emailHelper->setOutboundSettings(); Yii::app()->emailHelper->init(); $steve = UserTestHelper::createBasicUser('steve'); EmailMessageTestHelper::createEmailAccount($steve); if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) { $user = User::getByUsername('steve'); $user->primaryEmail->emailAddress = Yii::app()->params['emailTestAccounts']['userImapSettings']['imapUsername']; $this->assertTrue($user->save()); Yii::app()->imap->connect(); Yii::app()->imap->deleteMessages(true); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $emailMessage = EmailMessageTestHelper::createOutboxEmail($super, 'Test email', 'Raw content', ',b>html content</b>end.', 'Zurmo', Yii::app()->emailHelper->outboundUsername, 'Ivica', Yii::app()->params['emailTestAccounts']['userImapSettings']['imapUsername']); Yii::app()->imap->connect(); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(3, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued($emailMessage); $job = new ProcessOutboundEmailJob(); $this->assertTrue($job->run()); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(4, Yii::app()->emailHelper->getSentCount()); sleep(30); Yii::app()->imap->connect(); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(1, $imapStats->Nmsgs); } Yii::app()->emailHelper->sendEmailThroughTransport = false; }
/** * For testing only * @param string $subject * @param string $from * @param mixed(string || array) $to * @param string $textContent * @param string $htmlContent * @param mixed(string || array) $cc * @param mixed(string || array) $bcc * @param array $attachments * @param array $settings * @param array $headers * @param array $parts */ public function sendRawEmail($subject, $from, $to, $textContent = '', $htmlContent = '', $cc = null, $bcc = null, $attachments = null, $settings = null, $headers = array(), $parts = array()) { assert('is_string($subject) && $subject != ""'); assert('is_string($from) && $from != ""'); assert('(is_array($to) && !empty($to)) || is_string($to) || !isset($to)'); assert('is_string($textContent) || $textContent == null'); assert('is_string($htmlContent) || $htmlContent == null'); assert('(is_array($cc) && !empty($cc)) || is_string($cc) || !isset($cc)'); assert('(is_array($bcc) && !empty($bcc)) || is_string($bcc) || !isset($bcc)'); assert('isset($to) || isset($cc) || isset($bcc)'); assert('is_array($attachments) || !isset($attachments)'); assert('is_array($parts) || !isset($parts)'); $toName = null; $toAddress = null; if (is_string($to)) { $toAddress = $to; } elseif (is_array($to)) { foreach ($to as $key => $value) { $toName = $key; $toAddress = $value; } } $emailMessage = EmailMessageTestHelper::createOutboxEmail(Yii::app()->user->userModel, $subject, $htmlContent, $textContent, null, $from, $toName, $toAddress, $cc, $bcc); $mailer = new ZurmoSwiftMailer($emailMessage, null); if (!empty($parts)) { $mailer->parts = $parts; } $mailer->From = $from; if (is_array($to) && !empty($to)) { foreach ($to as $recipientEmail) { $mailer->addAddressByType($recipientEmail, '', EmailMessageRecipient::TYPE_TO); } } elseif (is_string($to)) { $mailer->addAddressByType($to, '', EmailMessageRecipient::TYPE_TO); } if (is_array($cc) && !empty($cc)) { foreach ($cc as $recipientEmail) { $mailer->addAddressByType($recipientEmail, '', EmailMessageRecipient::TYPE_CC); } } elseif (is_string($cc)) { $mailer->addAddressByType($cc, '', EmailMessageRecipient::TYPE_CC); } if (is_array($bcc) && !empty($bcc)) { foreach ($bcc as $recipientEmail) { $mailer->addAddressByType($recipientEmail, '', EmailMessageRecipient::TYPE_BCC); } } elseif (is_string($bcc)) { $mailer->addAddressByType($bcc, '', EmailMessageRecipient::TYPE_BCC); } if (isset($attachments) && !empty($attachments)) { foreach ($attachments as $file) { $mailer->attachFromPath($file); } } $mailer->headers = $headers; $acceptedRecipients = $mailer->send(); if ($acceptedRecipients > 0) { // Do nothing } else { // To-Do: make exception or something else echo "There was error while sending email"; } }
/** * @depends testRequiredAttributes */ public function testDeleteCampaign() { $campaigns = Campaign::getAll(); $this->assertEquals(4, count($campaigns)); CampaignItemTestHelper::createCampaignItem(0, $campaigns[0]); $campaignItems = CampaignItem::getAll(); $this->assertCount(1, $campaignItems); $campaignItemActivity = new CampaignItemActivity(); $campaignItemActivity->type = CampaignItemActivity::TYPE_CLICK; $campaignItemActivity->quantity = 1; $campaignItemActivity->campaignItem = $campaignItems[0]; $campaignItemActivity->latestSourceIP = '121.212.122.112'; $this->assertTrue($campaignItemActivity->save()); $emailMessage = EmailMessageTestHelper::createOutboxEmail(Yii::app()->user->userModel, 'subject', 'html', 'text', 'from', '*****@*****.**', 'to', '*****@*****.**'); $campaignItems[0]->emailMessage = $emailMessage; $this->assertTrue($campaignItems[0]->unrestrictedSave()); $this->assertEquals(1, CampaignItemActivity::getCount()); $this->assertEquals(1, EmailMessage::getCount()); $campaigns[0]->delete(); $this->assertEquals(3, Campaign::getCount()); $this->assertEquals(0, CampaignItem::getCount()); $this->assertEquals(0, CampaignItemActivity::getCount()); $this->assertEquals(1, EmailMessage::getCount()); }
public function testSavePurgesUnsetCampaignItemsForPausedToActiveStatusChangeIfNeeded() { $campaign = CampaignTestHelper::createCampaign('afterSaveDeleteUnsetCampaignItemsTest', 'subject', 'text'); // 3 items, 1 unprocessed, 1 processed with email in outbox, 1 processed with email in sent. $campaignItem = CampaignItemTestHelper::createCampaignItem(1, $campaign); $emailMessage = EmailMessageTestHelper::createOutboxEmail(Yii::app()->user->userModel, 'subject', 'html', 'text', 'from', '*****@*****.**', 'to', '*****@*****.**'); $campaignItem->emailMessage = $emailMessage; $this->assertTrue($campaignItem->unrestrictedSave()); $campaignItem2 = CampaignItemTestHelper::createCampaignItem(1, $campaign); $emailMessage2 = EmailMessageTestHelper::createDraftSystemEmail('subject2', Yii::app()->user->userModel); $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME); $emailMessage2->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_SENT); $this->assertTrue($emailMessage2->save()); $campaignItem2->emailMessage = $emailMessage2; $this->assertTrue($campaignItem2->unrestrictedSave()); CampaignItemTestHelper::createCampaignItem(0, $campaign); $this->assertCount(2, CampaignItem::getByProcessedAndCampaignId(1, $campaign->id)); $this->assertCount(1, CampaignItem::getByProcessedAndCampaignId(0, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_OUTBOX, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_SENT, $campaign->id)); // set initial status $campaign->status = Campaign::STATUS_PAUSED; $this->assertTrue($campaign->save()); $this->assertCount(2, CampaignItem::getByProcessedAndCampaignId(1, $campaign->id)); $this->assertCount(1, CampaignItem::getByProcessedAndCampaignId(0, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_OUTBOX, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_SENT, $campaign->id)); // change a non-dependent property, no change in campaign items $campaign->status = Campaign::STATUS_ACTIVE; $campaign->name = $campaign->name . 'modified'; $this->assertCount(2, CampaignItem::getByProcessedAndCampaignId(1, $campaign->id)); $this->assertCount(1, CampaignItem::getByProcessedAndCampaignId(0, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_OUTBOX, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_SENT, $campaign->id)); // reset status $campaign->status = Campaign::STATUS_PAUSED; $this->assertTrue($campaign->save()); // change a dependent property, unset should be deleted. $campaign->status = Campaign::STATUS_ACTIVE; $campaign->subject = $campaign->subject . 'modified'; $this->assertTrue($campaign->save()); // deleted: 1 processed with email in outbox, 1 unprocessed. $this->assertCount(1, CampaignItem::getByProcessedAndCampaignId(1, $campaign->id)); $this->assertCount(0, CampaignItem::getByProcessedAndCampaignId(0, $campaign->id)); $this->assertCount(0, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_OUTBOX, $campaign->id)); $this->assertCount(1, EmailMessage::getByFolderTypeAndCampaignId(EmailFolder::TYPE_SENT, $campaign->id)); }