Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
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;
     }
 }
 /**
  * Creating ID to template for mailtank
  */
 protected static function createLayoutId($templateName, $prefix)
 {
     return MailtankHelper::createLayoutId($templateName, $prefix);
 }