Documentation

Mailer
in package

Класс для работы с почтой

Class Mailer

Tags
author

Vladislav Andreev v@salesman.pro

version
5.2

(06/09/2019)

Table of Contents

CLIENTICON  = ['client' => 'icon-commerical-building', 'person' => 'icon-user-1']
Иконки клиента в зависимости от типа Юр.лицо/Физ.лицо
FOLDERICON  = ['conversation' => '<i class="icon-chat-1 orange"></i>', 'inbox' => '<i class="icon-download-1 blue"></i>', 'outbox' => '<i class="icon-upload-1 broun"></i>', 'draft' => '<i class="icon-doc-text gray"></i>', 'trash' => '<i class="icon-trash gray"></i>', 'sended' => '<i class="icon-forward-1 green"></i>']
Иконки папок
FOLDERNAME  = ['conversation' => 'Вся почта', 'inbox' => 'Входящее', 'outbox' => 'Исходящее', 'draft' => 'Черновик', 'trash' => 'Корзина', 'sended' => 'Отправлено']
FOLDERNAME. Имена папок
PRIORITY  = [1 => '<i class="icon-flag-1 red"></i> Высокий', 3 => '<i class="icon-flag-1 blue"></i> Нормальный', 5 => '<i class="icon-flag-1 yelw"></i> Низкий']
Названия приоритетов для отображения
PRIORITYICON  = ['1' => '<i class="icon-flag-1 red" title="Высокий"></i>', '3' => '<i class="icon-flag-1 blue" title="Нормальный"></i>', '5' => '<i class="icon-flag-1 yelw" title="Низкий"></i>']
Иконки приоритетов
TEMPLATE  = ' <html lang="ru"> <head> <title>{subject}</title> <STYLE type="text/css"> <!-- body { color:#222; font-size: 14px; line-height:18px; font-family: arial, tahoma,serif; background:#FFF; margin:5px; } div{ padding:5px 0; margin:0; display:block; } p{ padding:2px 0; } hr{ width:102%; border:0 none; border-top: #ccc 1px dotted; padding:0; height:1px; margin:5px -5px; clear:both; } a, a:visited, a:link{ color: #507192; display:inline; } a:active, a:hover{ color:red; } blockquote{ border-left: 2px solid #507192; padding-left: 20px; background: #FAFAFA; } --> </STYLE> </head> <body> {html} </body> </html> '
базовый шаблон сообщения
$attach  : array<string|int, mixed>
Параметры для отправки сообщений
$box  : string
Проверяемая почта: INBOX|SEND
$boxSettings  : mixed
$copy  : array<string|int, mixed>
Параметры для отправки сообщений
$days  : int
Число дней проверки почты. Методы: mailGet(), mailGetWorker()
$db  : mixed
Различные параметры, в основном из GLOBALS
$Error  : array<string|int, mixed>
Массив ошибок
$files  : array<string|int, mixed>
Параметры для отправки сообщений
$fpath  : mixed
Различные параметры, в основном из GLOBALS
$from  : array<string|int, mixed>
Параметры для отправки сообщений
$html  : string
Параметры для отправки сообщений
$id  : int
ID сообщения
$identity  : mixed
Различные параметры, в основном из GLOBALS
$iduser  : mixed
ID сотрудника, от которого идет отправка Применяется для загрузки настроек почты
$iduser1  : mixed
Различные параметры, в основном из GLOBALS
$ignoreExist  : bool
Нужно ли игнорировать существующие сообщения при проверке почты
$ivc  : mixed
Различные параметры, в основном из GLOBALS
$mailID  : int
ID настроек почтового ящика
$Message  : array<string|int, mixed>
Массив данных письма. Выдает метод mailInfo()
$messageid  : string
Почтовый ID письма вида <****@host>
$Messages  : array<string|int, mixed>
- Массив писем, Выдает mailList(); - Массив полученных и пока не обработанных писем, Выдает mailGet(); - Передается в качестве массива для обработки в Метод mailGetWorker();
$opts  : mixed
Различные параметры, в основном из GLOBALS
$otherSettings  : array<string|int, mixed>
$params  : array<string|int, mixed>
Передача различных параметров
$priority  : int
Приоритет сообщения 1 - Высокий 3 - Нормальный 5 - Низкий
$rootpath  : string
Абсолютный путь
$skey  : mixed
Различные параметры, в основном из GLOBALS
$sqlname  : mixed
Различные параметры, в основном из GLOBALS
$subject  : string
Параметры для отправки сообщений
$tmzone  : mixed
Различные параметры, в основном из GLOBALS
$to  : array<string|int, mixed>
Параметры для отправки сообщений
$uids  : array<string|int, mixed>
Массив uid писем, которые надо загрузить
$View  : array<string|int, mixed>
Массив для просмотра письма. Выдает метод mailView()
__construct()  : mixed
Работает только с объектом Подключает необходимые файлы, задает первоначальные параметры Mailer constructor
blackList()  : array<string|int, mixed>
Список e-mail(-ов), с которых запрещено принимать почту
clearHtml()  : string
Очищает входящий HTML от говна, которое добавляют почтовые сервисы - стили, js и пр.
clearInBody()  : int
Функция очистки изображений из папки inbody, которые отсутствуют в теле писем почтовика
clearOldMessages()  : bool
Удаляет все письма с вложениями старше $day дней
clearOtherMessages()  : bool
Удаляет все письма с вложениями ранее $day дней, которые не занесены в историю активностей
deleteMsgByPeriod()  : array<string|int, mixed>
Функция удаления писем без следов, включая вложения
getAttachmentFromEmail()  : array<string|int, mixed>
Загружает вложения конкретного письма по его uid
getAttachments()  : array<string|int, mixed>
Загрузка всех вложений письма
image2base64()  : mixed
Поиск вложенных изображений и конвертация в base64 Применяется в создании подписи
mailAction()  : string
Выполнение различных действий с сообщением непосредственно по IMAP, т.е. на сервере
mailActionPlus()  : string
Выполнение различных действий с письмами как на стороне CRM, так и на сервере
mailEdit()  : void
Сохранение/редактирование сообщения
mailGet()  : void
Получение сообщений
mailGetWorker()  : array<string|int, mixed>
Обработка полученных методом mailGet писем
mailInfo()  : void
Информация по сообщению
mailList()  : void
Список писем (левая панель)
mailListCard()  : void
Список ID сообщений для вывода в карточке Клиента/Контакта/Сделки
mailListConversation()  : void
Вывод писем из Входящих и Исходящих
mailSubmit()  : array<string|int, mixed>
Отправка сообщения
mailView()  : void
вывод данных сообщения
putHistory()  : array<string|int, mixed>
Добавление письма в историю
readAll()  : int
Изменение статуса сообщений прочитанными
searchEncode()  : mixed
Поиск кодировки в массиве заголовков
zipAttachment()  : void
Архивация всех вложений письма и выдача в браузер для скачивания
zipAttachmentFromEmail()  : array<string|int, mixed>
Загружает вложения конкретного письма по его uid
decrypt()  : string
Расшифровка логина/пароля
downloadAttachment()  : void
Загрузка вложений
encodeToUtf8()  : false|string
Преобразование в кодировку UTF-8
getBody()  : bool|string
Получение тела письма
getMimeType()  : string
Получение MimeType по структуре письма
getPart()  : bool|string
Получает нужную часть письма
objectToArray()  : mixed
Преобразование объекта в массив, с учетом подмассивов, которые тоже могут быть объектами

Constants

CLIENTICON

Иконки клиента в зависимости от типа Юр.лицо/Физ.лицо

public mixed CLIENTICON = ['client' => 'icon-commerical-building', 'person' => 'icon-user-1']

FOLDERICON

Иконки папок

public mixed FOLDERICON = ['conversation' => '<i class="icon-chat-1 orange"></i>', 'inbox' => '<i class="icon-download-1 blue"></i>', 'outbox' => '<i class="icon-upload-1 broun"></i>', 'draft' => '<i class="icon-doc-text gray"></i>', 'trash' => '<i class="icon-trash gray"></i>', 'sended' => '<i class="icon-forward-1 green"></i>']

FOLDERNAME

FOLDERNAME. Имена папок

public mixed FOLDERNAME = ['conversation' => 'Вся почта', 'inbox' => 'Входящее', 'outbox' => 'Исходящее', 'draft' => 'Черновик', 'trash' => 'Корзина', 'sended' => 'Отправлено']

PRIORITY

Названия приоритетов для отображения

public mixed PRIORITY = [1 => '<i class="icon-flag-1 red"></i> Высокий', 3 => '<i class="icon-flag-1 blue"></i> Нормальный', 5 => '<i class="icon-flag-1 yelw"></i> Низкий']

PRIORITYICON

Иконки приоритетов

public mixed PRIORITYICON = ['1' => '<i class="icon-flag-1 red" title="Высокий"></i>', '3' => '<i class="icon-flag-1 blue" title="Нормальный"></i>', '5' => '<i class="icon-flag-1 yelw" title="Низкий"></i>']

TEMPLATE

базовый шаблон сообщения

public mixed TEMPLATE = ' <html lang="ru"> <head> <title>{subject}</title> <STYLE type="text/css"> <!-- body { color:#222; font-size: 14px; line-height:18px; font-family: arial, tahoma,serif; background:#FFF; margin:5px; } div{ padding:5px 0; margin:0; display:block; } p{ padding:2px 0; } hr{ width:102%; border:0 none; border-top: #ccc 1px dotted; padding:0; height:1px; margin:5px -5px; clear:both; } a, a:visited, a:link{ color: #507192; display:inline; } a:active, a:hover{ color:red; } blockquote{ border-left: 2px solid #507192; padding-left: 20px; background: #FAFAFA; } --> </STYLE> </head> <body> {html} </body> </html> '

Properties

$attach

Параметры для отправки сообщений

public array<string|int, mixed> $attach = []

$box

Проверяемая почта: INBOX|SEND

public string $box = 'INBOX'

$boxSettings

public mixed $boxSettings = []

$copy

Параметры для отправки сообщений

public array<string|int, mixed> $copy = []

$days

Число дней проверки почты. Методы: mailGet(), mailGetWorker()

public int $days = 7

$db

Различные параметры, в основном из GLOBALS

public mixed $db

$Error

Массив ошибок

public array<string|int, mixed> $Error = []

$files

Параметры для отправки сообщений

public array<string|int, mixed> $files = []

$fpath

Различные параметры, в основном из GLOBALS

public mixed $fpath

$from

Параметры для отправки сообщений

public array<string|int, mixed> $from = []

$html

Параметры для отправки сообщений

public string $html = ''

$id

ID сообщения

public int $id = 0

$identity

Различные параметры, в основном из GLOBALS

public mixed $identity

$iduser

ID сотрудника, от которого идет отправка Применяется для загрузки настроек почты

public mixed $iduser

$iduser1

Различные параметры, в основном из GLOBALS

public mixed $iduser1

$ignoreExist

Нужно ли игнорировать существующие сообщения при проверке почты

public bool $ignoreExist = false

$ivc

Различные параметры, в основном из GLOBALS

public mixed $ivc

$mailID

ID настроек почтового ящика

public int $mailID = 0

$Message

Массив данных письма. Выдает метод mailInfo()

public array<string|int, mixed> $Message = []

$messageid

Почтовый ID письма вида <****@host>

public string $messageid = ''

$Messages

- Массив писем, Выдает mailList(); - Массив полученных и пока не обработанных писем, Выдает mailGet(); - Передается в качестве массива для обработки в Метод mailGetWorker();

public array<string|int, mixed> $Messages = []
Tags
uses

mailList(), mailGet(), mailGetWorker()

$opts

Различные параметры, в основном из GLOBALS

public mixed $opts

$otherSettings

public array<string|int, mixed> $otherSettings = []

$params

Передача различных параметров

public array<string|int, mixed> $params = []

$priority

Приоритет сообщения 1 - Высокий 3 - Нормальный 5 - Низкий

public int $priority = 3

$rootpath

Абсолютный путь

public string $rootpath

$skey

Различные параметры, в основном из GLOBALS

public mixed $skey

$sqlname

Различные параметры, в основном из GLOBALS

public mixed $sqlname

$subject

Параметры для отправки сообщений

public string $subject = ''

$tmzone

Различные параметры, в основном из GLOBALS

public mixed $tmzone

$to

Параметры для отправки сообщений

public array<string|int, mixed> $to = []

$uids

Массив uid писем, которые надо загрузить

public array<string|int, mixed> $uids = []

$View

Массив для просмотра письма. Выдает метод mailView()

public array<string|int, mixed> $View = []

Methods

__construct()

Работает только с объектом Подключает необходимые файлы, задает первоначальные параметры Mailer constructor

public __construct() : mixed
Return values
mixed

blackList()

Список e-mail(-ов), с которых запрещено принимать почту

public static blackList() : array<string|int, mixed>
Return values
array<string|int, mixed>

$blacklist - возвращает список запрещенных e-mail для данного пользователя

clearHtml()

Очищает входящий HTML от говна, которое добавляют почтовые сервисы - стили, js и пр.

public static clearHtml( $html) : string

Также производится проверка на наличие

Parameters
$html :
Return values
string

clearInBody()

Функция очистки изображений из папки inbody, которые отсутствуют в теле писем почтовика

public static clearInBody() : int
Return values
int

clearOldMessages()

Удаляет все письма с вложениями старше $day дней

public static clearOldMessages( $iduser[, int $day = 90 ]) : bool
Parameters
$iduser :
$day : int = 90
Return values
bool

clearOtherMessages()

Удаляет все письма с вложениями ранее $day дней, которые не занесены в историю активностей

public static clearOtherMessages(int $iduser[, int $day = 10 ]) : bool
Parameters
$iduser : int
$day : int = 10
Return values
bool

deleteMsgByPeriod()

Функция удаления писем без следов, включая вложения

public static deleteMsgByPeriod(int $iduser[, int $period = 5 ]) : array<string|int, mixed>
Parameters
$iduser : int
  • id сотрудника, письма которого удаляем
$period : int = 5
  • количество дней, за которое удаляем сообщения ( default = 5 )
Return values
array<string|int, mixed>

id - идентификатор письма text - сообщение с результатом

getAttachmentFromEmail()

Загружает вложения конкретного письма по его uid

public static getAttachmentFromEmail( $uid,  $mid[, int $file = [] | "" ]) : array<string|int, mixed>
Parameters
$uid :
  • uid сообщения
$mid :
  • id сообщения
$file : int = [] | ""
  • конкретный файл или все файлы, если не указано
Return values
array<string|int, mixed>
  • int uid - uid письма
  • array|string file системное имя
  • string name оригинальное имя файла

getAttachments()

Загрузка всех вложений письма

public static getAttachments(int $id[, array<string|int, mixed> $attachments = [] ]) : array<string|int, mixed>
Parameters
$id : int
$attachments : array<string|int, mixed> = []
Return values
array<string|int, mixed>
  • str rezult = ok|error
  • array attachments
    • size - размер файла, кб
    • icon - иконка формата
    • fid - id файла, есзли загружен в систему
    • folder - папка = ymail/, если не загружен в систему
  • array error

image2base64()

Поиск вложенных изображений и конвертация в base64 Применяется в создании подписи

public static image2base64( $html[, bool $resize = false ]) : mixed
Parameters
$html :
$resize : bool = false
Tags
throws
ImageResizeException
Return values
mixed

mailAction()

Выполнение различных действий с сообщением непосредственно по IMAP, т.е. на сервере

public static mailAction(int $id[, string $action = '' ]) : string
Parameters
$id : int
  • id письма
$action : string = ''
  • действие: delete, seen, unseen
Return values
string

mailActionPlus()

Выполнение различных действий с письмами как на стороне CRM, так и на сервере

public static mailActionPlus([array<string|int, mixed> $param = [] ]) : string
Parameters
$param : array<string|int, mixed> = []
  • int iduser - iduser для которого выполняются действия ( в т.ч. для загрузки настроек подключения к серверу )
  • str tip - действие ( seen, delete, trash, untrash, multitrash, emptytrash, readall, multidelete, history )
  • int id - id сообщения ( для seen, delete, trash, untrash, history )
  • array multi - массив id писем ( для multitrash, emptytrash, multidelete )
Return values
string

mailEdit()

Сохранение/редактирование сообщения

public mailEdit() : void
$mail = new Salesman\Mailer();
$mail -> subject = "Тест с отправкой";
$mail -> to      = [
     "email" => "a.vladislav.g@gmail.com",
     "name"  => "Владислав"
];
$mail -> html    = "<h1>Привет, {client}</h1><div>Это успех!</div><div>{manager}</div>";

$mail -> mailEdit();
$mid   = $mail -> id;
$error = $mail -> Error;
Return values
void

mailGet()

Получение сообщений

public mailGet() : void
$mail = new Salesman\Mailer()
$mail -> params['ignoreattachments'] = 1 // игнорировать вложения ( для Сборщика заявок )
$mail -> params['deletemess'] = true // удалить письмо с сервера ( для Сборщика заявок )
$mail -> params['smtp'] = [] // передать собственные настройки соединения ( для Сборщика заявок )
$mail -> params['ignoreuids'] = [] // передать массив uid сообщений, которые следует игнорировать
$mail -> ignoreuids = [] // передать массив uid сообщений, которые следует игнорировать (альтернатива)
$mail -> iduser = 14 // id сотрудника ( не нужен, если задан mailID )
$mail -> uids = [] // передать массив uid сообщений, которые следует загружать (например для повторной загрузки)
$mail -> box = 'INBOX' // проверяемый ящик (INBOX, SEND)
$mail -> days = 1 // количество дней проверки ( по умолчанию = 7 )
$mail -> mailID = 2 // id настроек почтового ящика из таблицы *ymail_settings
$mail -> mailGet()
$email = $mail -> Messages
Return values
void

mailGetWorker()

Обработка полученных методом mailGet писем

public mailGetWorker() : array<string|int, mixed>
Tags
throws
Exception
Return values
array<string|int, mixed>
 [
     "result" => empty($err) ? "Получено $d писем <b>$mcount</b>" : "error",
     "text" => empty($err) ? "Получено $d писем <b>$mcount</b>" : "Ошибка: ".implode("<br>", $err),
     "mcount" => $mcount,
     "last" => $last
 ]
$mail           = new Salesman\Mailer();
$mail -> iduser = $iduser1;
$mail -> box    = $box;
$mail -> mailGet();

$messages = $mail -> Messages;
$error    = $mail -> Error;

$mail -> box      = $box;
$mail -> Messages = $messages;
$mail -> iduser   = $iduser1;
$rez              = $mail -> mailGetWorker();

mailInfo()

Информация по сообщению

public mailInfo() : void
$mail = new Salesman\Mailer();
$mail -> id = 27651;
$mail -> mailInfo();
$email = $mail -> Message;
Return values
void

mailList()

Список писем (левая панель)

public mailList() : void
$list = new \Salesman\Mailer();
$list -> params = $params;

$list -> mailList();
$lists = $list -> Messages;
Return values
void

mailListCard()

Список ID сообщений для вывода в карточке Клиента/Контакта/Сделки

public mailListCard() : void
Return values
void

mailListConversation()

Вывод писем из Входящих и Исходящих

public mailListConversation() : void
Return values
void

mailSubmit()

Отправка сообщения

public mailSubmit() : array<string|int, mixed>
  • int $iduser - пользователь, от которого происходит отправка
  • int $identity
  • int $priority - приоритет сообщения
  • string $subject - тема сообщения
  • string $html - текст сообщения
  • string|array $to - массив email получателей
  • string|array $toname - массив имен получателей
  • array $attach - массив вложений из папки ymail
    • name => file
  • array $files - массив вложений
    • name => file
Tags
throws
Exception
$mail = new Salesman\Mailer();
try {

     $mail -> id = $mid;
     $result = $mail -> mailSubmit();

}
catch (phpmailerException $e) {

     $err[] = $e ->errorMessage();

}
catch (Exception $e) {

     $err[] = $e ->getMessage();

}

$rez = [
     "id"        => $id,
     "result"    => $result,
     "error"     => $err,
     "messageid" => $result['messageid']
];
Return values
array<string|int, mixed>
  • messageid
  • error
  • imaperror

mailView()

вывод данных сообщения

public mailView() : void
$mail = new Salesman\Mailer();
$mail -> id = 27620;
$mail -> mailView();
$email = $mail -> View;
Return values
void

putHistory()

Добавление письма в историю

public static putHistory( $id, int $iduser) : array<string|int, mixed>
Parameters
$id :
$iduser : int
Tags
throws
Exception
Return values
array<string|int, mixed>

readAll()

Изменение статуса сообщений прочитанными

public static readAll([array<string|int, mixed> $params = [] ]) : int
Parameters
$params : array<string|int, mixed> = []

int iduser - ограничение по сотруднику (иначе iduser1) int|array id - массив id сообщений или конкретный id

Return values
int

searchEncode()

Поиск кодировки в массиве заголовков

public static searchEncode( $array) : mixed
Parameters
$array :
Return values
mixed

zipAttachment()

Архивация всех вложений письма и выдача в браузер для скачивания

public static zipAttachment( $id) : void
Parameters
$id :
Return values
void

zipAttachmentFromEmail()

Загружает вложения конкретного письма по его uid

public static zipAttachmentFromEmail( $uid[, string $file = "" ]) : array<string|int, mixed>
Parameters
$uid :
  • uid сообщения
$file : string = ""
  • конкретный файл или все файлы, если не указано
Return values
array<string|int, mixed>
  • uid
  • file (системное имя)
  • name (оригинальное имя файла)

decrypt()

Расшифровка логина/пароля

private static decrypt( $text,  $key,  $iv) : string
Parameters
$text :
$key :
$iv :
Return values
string

downloadAttachment()

Загрузка вложений

private static downloadAttachment( $imap,  $uid,  $partNum,  $encoding,  $path,  $filename) : void
Parameters
$imap :
$uid :
$partNum :
$encoding :
$path :
$filename :
Return values
void

encodeToUtf8()

Преобразование в кодировку UTF-8

private static encodeToUtf8( $string) : false|string
Parameters
$string :
Return values
false|string

getBody()

Получение тела письма

private static getBody( $uid,  $imap) : bool|string
Parameters
$uid :
$imap :
Return values
bool|string

getMimeType()

Получение MimeType по структуре письма

private static getMimeType( $structure) : string
Parameters
$structure :
Return values
string

getPart()

Получает нужную часть письма

private static getPart( $imap,  $uid,  $mimetype[,  $structure = NULL ][,  $partNumber = NULL ]) : bool|string
Parameters
$imap :
$uid :
$mimetype :
$structure : = NULL
$partNumber : = NULL
Return values
bool|string

objectToArray()

Преобразование объекта в массив, с учетом подмассивов, которые тоже могут быть объектами

private static objectToArray( $object) : mixed
Parameters
$object :
Return values
mixed

Search results