Exemplo 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();
 }
Exemplo n.º 2
0
 /**
  * Отправка одиночного письма через мейлтанк
  * Если надо разослать нескольких подписчикам, то см. sendSubscribeToMailtank
  * @param string    $email      почта получателя
  * @param string    $template   шаблон письма
  * @param string    $subject    тема письма
  * @param array     $fields     данные, передаваемые в шаблон
  * @param array     $tags       теги подписки/отписки
  * @param integer   $userId     Id получателя, если есть (запишется в подписчика, не обязательное)
  * @param string    $userName   Имя получателя, если есть (запишется в подписчика, не обязательное)
  * @param array     $attachments
  * @return true|string Возвращается или true или строка ошибки
  */
 public function sendSingleMailToMailtank($email, $template, $subject, $fields, $tags, $userId = 0, $userName = '', $attachments = [])
 {
     $tagsAndReciversUnion = false;
     $priority = null;
     // Если вообще не пришли параметры
     if (empty($email) || !is_string($email)) {
         return 'No email';
     }
     // Почта должна быть валидной
     $email = MailtankHelper::checkEmail($email);
     if (!$email) {
         return 'Incorrect email';
     }
     if (empty($template) || !is_string($template)) {
         return 'Incorrect template';
     }
     if (!is_array($fields)) {
         return 'Fields is not array';
     }
     // Если tags не массив
     if (empty($tags) || !is_array($tags)) {
         return 'Incorrect tags. Must be not empty array';
     }
     // Приложенные файлы должны быть массивом
     if (!is_array($attachments)) {
         return 'Attachments is not array';
     }
     $unsubscribeTags = $tags;
     // Заполняем необходимые поля для письма
     $fields = array_merge($fields, ['subject' => $subject]);
     $s = MailtankHelper::getSubscriber($email);
     if ($s) {
         $res = MailtankHelper::updateSubscriber($s, [], ['userId' => $userId, 'userName' => $userName]);
         if (!$res) {
             return 'Error during update subscriber <' . $s->id . '>';
         }
     } else {
         // Создаем нового подписчика
         $s = MailtankHelper::createSubscriber($email, $userId, $userName);
         if (!$s) {
             return 'Subscriber <' . $s->id . '> was not created';
         }
     }
     $mailtankId = $s->id;
     // Подписываем только на те теги, от которых пользователь не отписан
     $amountTags = 0;
     $updateTags = [];
     foreach ($tags as $t) {
         // Если тег есть, то все ок
         if (in_array($t, $s->tags)) {
             $amountTags++;
         } else {
             // Если тега нет, то проверяем были ли когда-нибудь от него отписаны
             if (!MailtankHelper::hasUnsubscribeAction($email, $t)) {
                 $updateTags[] = $t;
                 $amountTags++;
             }
         }
     }
     if (count($updateTags) > 0) {
         if (!MailtankHelper::updateSubscriber($s, $updateTags)) {
             return 'Error during update tags for subscriber';
         }
     }
     if ($amountTags > 0) {
         // Хотя бы один тег есть, рассылаем по тегу
         if (!$this->sendToMailtank($template, $fields, $tags, $unsubscribeTags, [$mailtankId], $priority, $tagsAndReciversUnion, $attachments)) {
             return 'Error during sending mail. See sentry for details.';
         }
     }
     return true;
 }