public function testCreate() { try { TemplatesHelperTest::createSubscribeTemplates(Yii::$app->mailtank->templatesPath, Yii::$app->mailtank->templatePrefix, false); } catch (\Exception $e) { $this->clearUnusedData(); throw $e; } $layoutIds = TemplatesHelperTest::getLayoutsIds(); $this->assertNotEmpty($layoutIds, 'Templates didnt create'); $layoutId = array_shift($layoutIds); // Create subscribers and tags $emails = []; $tags = ['test_tag_' . uniqid()]; for ($i = 2; $i > 0; $i--) { $id = uniqid(); $email = $id . '@example.com'; $subscriber = MailtankHelper::createSubscriber($email, $id, 'name_' . $id, $tags); if ($subscriber) { self::$subscribers[] = $subscriber->id; $emails[] = $email; } } $res = Yii::$app->mailtank->sendSubscribeToMailtank('subfolder\\mail', 'Test subscribe', [], $tags, $emails); if ($res !== true) { $this->clearUnusedData(); $this->fail($res); } $res = Yii::$app->mailtank->sendSingleMailToMailtank($emails[0], 'subfolder\\mail', 'Test single mail', [], $tags); if ($res !== true) { $this->clearUnusedData(); $this->fail($res); } $this->clearUnusedData(); }
/** * Create new subscriber * @param string $email * @param integer $userId * @param string $userName * @param array $tags * @param array $props */ public static function createSubscriber($email, $userId = 0, $userName = '', $tags = [], $props = []) { $subscriber = new MailtankSubscriber(); $subscriber->email = $email; $subscriber->setProperty('userId', $userId); $subscriber->setProperty('userName', $userName); $subscriber->setProperty('created', time()); $subscriber->tags = $tags; foreach ($props as $k => $v) { $subscriber->setProperty($k, $v); } if (!$subscriber->save()) { throw new MailtankException(MailtankHelper::implodeErrors('; ', $subscriber->getErrors())); } if (!self::createInnerSubscriber($email, $subscriber->id)) { // Подчищаем мейлтанк за собой, иначе там навечно зависнет не привязанный к системе пользователь $subscriber->delete(); return false; } return $subscriber; }
/** * Отправить рассылку в мейлтанк */ private function sendToMailtank($template, $fields, $tags = [], $unsubscribeTags = [], $subscribers = [], $priority = null, $tagsAndReciversUnion = false, $attachments = []) { // NOTE: Т.к. метод приватный и все необходимые проверки сделаны, // предполагаем, что все параметры правильные $fields = MailtankHelper::convertToString($fields); $attributes = ['layout_id' => MailtankHelper::createLayoutId($template, $this->templatePrefix), 'context' => $fields]; if (is_array($attachments) && !empty($attachments)) { $attributes['attachments'] = $attachments; } if (is_array($tags) && !empty($tags)) { $tags = array_values($tags); $attributes['tags'] = $tags; } if (is_array($subscribers) && !empty($subscribers)) { $subscribers = array_values($subscribers); $attributes['subscribers'] = $subscribers; } $mailing = new MailtankMailing(); $mailing->setAttributes($attributes); if (is_array($unsubscribeTags) && !empty($unsubscribeTags)) { $mailing->unsubscribe_tags = $unsubscribeTags; } $mailing->tags_and_receivers_union = $tagsAndReciversUnion; try { $mailing->save(); switch ($mailing->status) { case 'SUCCEEDED': case 'ENQUEUED': return true; } throw new MailtankException(MailtankHelper::implodeErrors('; ', $mailing->getErrors())); } catch (MailtankException $e) { // NOTE: Данный код нужен только для того, чтобы отслеживать недоступность сервиса // При реальной ошибке мы ее не обнаружим, т.к. на этом уровне // нельзя различить недоступность сервиса и ошибку мейлтанка, поэтому Sentry нам в помощь // Отправляем в сентри Yii::error(['msg' => 'Ошибка отправки сообщения в mailtank', 'data' => array_merge(['exceptionMsg' => $e->getMessage()], $mailing->getErrors())]); throw $e; } }
/** * Creating ID to template for mailtank */ protected static function createLayoutId($templateName, $prefix) { return MailtankHelper::createLayoutId($templateName, $prefix); }