АдресаЭлектроннойПочтыИзСтроки (БСП)

Автор: 1С
ОбщийМодуль.ОбщегоНазначенияКлиентСервер
БСП

Адреса электронной почты из строки. Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов.

// Разбирает строку с адресами электронной почты. При разборе проверяет корректность адресов.
//
// Параметры:
//  СписокАдресов - Строка - адреса электронной почты, разделитель - запятая, либо точка с запятой:
//                           Получатель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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОбновитьАдресЭлектроннойПочты (БСП)

НаименованиеИАдресаЭлектроннойПочтыКонтакта (БСП)

ПолучитьАдресаЭлектроннойПочтыКонтакта (БСП)

ОпределитьАдресЭлектроннойПочтыПользователя (БСП)

ВсеКонтактыПоНачалуНаименованияСАдресамиЭлектроннойПочты (БСП)

ПолучитьАдресаЭлектроннойПочтыДляМассиваКонтактов (БСП)

СоздатьЗапросНаСменуПочты (БСП)

ДоменАдресаКонтактнойИнформации (БСП)

ПриСозданииЗапросаНаСменуПочты (БСП)

TurboConf - расширение Конфигуратора 1С