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;
 }
Esempio n. 2
0
 /**
  * Отправить рассылку в мейлтанк
  */
 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;
     }
 }