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