Адреса электронной почты из строки. Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов.
// Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов.
//
// Параметры:
// СписокАдресов - Строка - адреса электронной почты, разделитель - запятая, либо точка с запятой:
// Получатель1 <Адрес1>, Получатель 2 <Адрес2>... Получатель N <АдресN>.
//
// Возвращаемое значение:
// Массив - содержит массив структур адресов.
// Поля структуры:
// Псевдоним - Строка - представление адресата.
// Адрес - Строка - найденный и соответствующий требованиям почтовый адрес.
// Если текст, похожий на адрес найден, но не соответствует требованиям
// стандартов, то такой текст записывается в поле "Псевдоним".
// ОписаниеОшибки - Строка - текстовое представление ошибки, либо пустая строка, если ошибок нет.
//
Функция АдресаЭлектроннойПочтыИзСтроки(Знач СписокАдресов) Экспорт
Результат = Новый Массив;
// заменяем скобки на пробелы
СимволыСкобок = "<>()[]";
Строка = ЗаменитьСимволыВСтрокеНаПробелы(СписокАдресов, СимволыСкобок);
// Приводим разделители к одному виду.
Строка = СтрЗаменить(Строка, ",", ";");
// Раскладываем mailbox-list на mailbox'ы.
МассивАдресов = СтрРазделить(Строка, ";", Ложь);
// Выделяем из строки адреса (mailbox'а) псевдоним (display-name) и адрес (addr-spec).
Для Каждого СтрокаАдреса Из МассивАдресов Цикл
Если ПустаяСтрока(СтрокаАдреса) Тогда
Продолжить;
КонецЕсли;
Псевдоним = "";
Адрес = "";
ОписаниеОшибки = "";
Если СтрЧислоВхождений(СтрокаАдреса, "@") <> 1 Тогда
Псевдоним = СтрокаАдреса;
Иначе
// Все, что не подходит в качестве адреса, складываем в псевдоним.
Для Каждого Подстрока Из СтрРазделить(СтрокаАдреса, " ", Ложь) Цикл
Если ПустаяСтрока(Адрес) И АдресЭлектроннойПочтыСоответствуетТребованиям(Подстрока) Тогда
Адрес = Подстрока;
Иначе
Псевдоним = Псевдоним + " " + Подстрока;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Псевдоним = СокрЛП(Псевдоним);
АдресОпределен = Не ПустаяСтрока(Адрес);
ЕстьПризнакНаличияАдресаВСтроке = СтрНайти(СтрокаАдреса, "@") > 0;
Если Не АдресОпределен Тогда
Если ЕстьПризнакНаличияАдресаВСтроке Тогда
ОписаниеОшибки = НСтр("ru = 'Адрес электронной почты содержит ошибки'");
Иначе
ОписаниеОшибки = НСтр("ru = 'Строка не содержит адреса электронной почты'");
КонецЕсли;
КонецЕсли;
СтруктураАдреса = Новый Структура("Псевдоним, Адрес, ОписаниеОшибки", Псевдоним, Адрес, ОписаниеОшибки);
Результат.Добавить(СтруктураАдреса);
КонецЦикла;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ОбновитьАдресЭлектроннойПочты (БСП)
НаименованиеИАдресаЭлектроннойПочтыКонтакта (БСП)
ПолучитьАдресаЭлектроннойПочтыКонтакта (БСП)
ОпределитьАдресЭлектроннойПочтыПользователя (БСП)
ВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты (БСП)
ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов (БСП)
СоздатьЗапросНаСменуПочты (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)