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(); }
/** * Отправка одиночного письма через мейлтанк * Если надо разослать нескольких подписчикам, то см. 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; }