コード例 #1
0
ファイル: Mailtank.php プロジェクト: darkair/yii2-mailtank
 /**
  * Отправка одиночного письма через мейлтанк
  * Если надо разослать нескольких подписчикам, то см. 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;
 }