public static function createBasicModel() { // Create subscribers and tags $tags = ['test_tag_' . uniqid()]; for ($i = 2; $i > 0; $i--) { $subscriber = SubscriberTest::createBasicModel(); $subscriber->tags = $tags; $res = $subscriber->save(); if (!$res) { print_r($subscriber->getErrors()); $this->assertTrue(false); } self::$subscribers[] = $subscriber->id; } $layout = LayoutTest::createBasicModel(); $layout->markup = '{{some_var}} {{unsubscribe_link}}'; $layout->subject_markup = 'Hello'; $res = $layout->save(); if (!$res) { print_r($layout->getErrors()); $this->assertTrue(false); } self::$layoutId = $layout->id; $model = new MailtankMailing(); $model->setAttributes(['layout_id' => $layout->id, 'context' => ['some_var' => 'some value'], 'tags' => $tags, 'subscribers' => self::$subscribers, 'unsubscribe_tags' => $tags]); self::assertTrue($model->validate()); return $model; }
/** * Отправить рассылку в мейлтанк */ 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; } }