Описание сущности Адрес эл почты в спецификации Часть 49324

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

В данной статье рассматривается детальное описание сущности «Адрес эл․ почты» в контексте спецификации Часть 49324 (далее, Спецификация)․ Данный идентификатор обычно встречается в корпоративных стандартах обмена данными‚ схемах интеграции (например‚ СМЭВ‚ ГИС‚ отраслевые стандарты) или во внутренних нормативных документах организаций‚ регламентирующих формат хранения и передачи контактной информации․


Общее назначение и область применения

Спецификация Часть 49324 устанавливает единые правила представления адреса электронной почты в информационных системах․ Основные цели:

  • Унификация: Исключение расхождений в форматах хранения (пробелы‚ регистр‚ спецсимволы)․
  • Валидация: Определение алгоритмов проверки синтаксической корректности на стороне отправителя и получателя данных․
  • Интеграция: Обеспечение бесшовного обмена данными междуheterogeneous системами (CRM‚ ERP‚ порталы госуслуг‚ банковские шлюзы)․
  • Безопасность: Нормализация ввода для предотвращения атак инъекций (Header Injection‚ XSS через email)․

Важно: Данная часть спецификации не заменяет RFC 5322 / RFC 6531‚ а накладывает дополнительные ограничения (профиль)‚ обязательные для реализации в рамках конкретной информационной системы․


Структура данных (Схема)

Согласно Части 49324‚ адрес электронной почты представляется не как простая строка‚ а как сложный тип данных (Complex Type)‚ включающий следующие атрибуты:

Атрибут / Элемент Тип данных Обязательность Описание
EmailAddress (Корневой элемент) ComplexType Да Контейнер для всех компонентов адреса․
LocalPart (Локальная часть) String (1;․64) Да Часть до символа ‘@’․ Кодировка UTF-8 (согласно RFC 6531 / SMTPUTF8)․
DomainPart (Доменная часть) String (1․․255) Да Часть после символа ‘@’․ Только ASCII (A-label) или Unicode (U-label) с обязательной проверкой DNS․
DisplayName (Отображаемое имя) String (0․․128) Нет Имя получателя для UI (например‚ «Иванов Иван»)․ Кодировка UTF-8․
Type (Тип адреса) Enumeration Нет Возможные значения: Work‚ Personal‚ Notification‚ System‚ Other․
IsPrimary (Основной) Boolean Нет (Default: false) Флаг‚ указывающий на основной адрес для коммуникаций․
VerifiedAt (Дата верификации) DateTime (ISO 8601) Нет Момент последнего успешного подтверждения владения адресом․
Status (Статус) Enumeration Нет (Default: Active) Active‚ Bounced‚ Unsubscribed‚ PendingVerification‚ Blocked․

Правила валидации (Профиль 49324)

Спецификация вводит строгие правила‚ выходящие за рамки базовой проверки регулярным выражением․

Локальная часть (LocalPart)

  1. Длина: от 1 до (в байтах UTF-8)․
  2. Запрещенные символы: Пробелы (в начале/конце и внутри‚ если не в кавычках)‚ управляющие символы (ASCII 0-31‚ 127)․
  3. Квотирование: Если используются спецсимволы []:‚;@"‚ локальная часть обязательно должна быть взята в двойные кавычки (Quoted-string)․ Пример: "ivanov‚ivan"@domain․ru․
  4. Точки: Нельзя начинать или заканчивать точкой‚ нельзя ставить две точки подряд ․․ (если не в кавычках)․
  5. Нормализация: При сохранении в БД рекомендуется приводить к нижнему регистру (Lowercase)‚ так как большинство MTA считают локальную часть case-insensitive (хотя RFC позволяет case-sensitive)․

Доменная часть (DomainPart)

  1. Длина: до (включая точки)․ Каждая метка (label) до ․
  2. IDN (Internationalized Domain Names): Допускается хранение в виде U-label (Unicode: пример․рф) или A-label (Punycode: xn--e1afmkfd․xn--p1ai)․ При передаче по SMTP обязательно преобразование в A-label․
  3. DNS Проверка (Mandatory): При вводе/импорте система обязана выполнить проверку существования MX-записи (или A/AAAA как fallback) для домена․ Адреса с несуществующими доменами получают статус PendingVerification или Invalid․
  4. Запрещенные домены: Локальные домены (localhost‚ local‚ internal)‚ одноуровневые домены (только TLD)‚ домены из списков одноразовых почт (Disposable Email Blocklists)․

Общая длина

Полный адрес (LocalPart@DomainPart) не должен превышать (согласно RFC 5321)‚ что жестко контролируется на уровне схемы БД (VARCHAR(254))․


Примеры корректных и некорректных значений

Корректные (соответствуют Части 49324):

  • user․name@domain․ru
  • user+tag@sub․domain․com (Subaddressing / Plus-addressing поддерживается)
  • "user‚ name"@domain․ru (Квотирование с запятой)
  • пользователь@пример․рф (Unicode / SMTPUTF8)
  • user_name123@xn--e1afmkfd․xn--p1ai (Punycode представление)

Некорректные (отклоняются валидатором 49324):

  • user@domain (Отсутствует TLD / MX запись)
  • user․․name@domain․ru (Две точки подряд)
  • ․username@domain․ru (Начинается с точки)
  • user name@domain․ru (Пробел без кавычек)
  • user@-domain․ru (Метка начинается с дефиса)
  • user@domain․․ru (Две точки в домене)
  • user@temp-mail․org (Домен в блок-листе одноразовых почт)

Процедуры верификации и жизненный цикл

Часть 49324 регламентирует обязательный процесс подтверждения владения адресом (Double Opt-In / Verification Flow):

  1. Инициация: Пользователь вводит адрес -> Система проходит синтаксическую и DNS-валидацию․
  2. Генерация токена: Создается криптографически стойкий токен (JWT или Opaque Token) с TTL 24 часа․
  3. Отправка: Письмо с ссылкой подтверждения отправляется через надежный MTA (с настройками SPF‚ DKIM‚ DMARC)․
  4. Подтверждение: Пользователь переходит по ссылке -> Система валидирует токен -> Статус меняется на Active‚ поле VerifiedAt заполняется текущим временем․
  5. Обработка Bounce: При получении Hard Bounce (5xx) от MTA при рассылках — статус меняется на Bounced‚ адрес исключается из рассылок․
  6. Регулярная ревалидация: Рекомендуется ежеквартальная проверка актуальности MX-записей для адресов со статусом Active․

Требования к хранению и защите данных (Безопасность)

В соответствии с принципами Privacy by Design и требованиями 152-ФЗ / GDPR:

  • Шифрование: Поле EmailAddress (в связке с ФИО/ID пользователя) считается ПДн․ В БД хранится в зашифрованном виде (AES-256-GCM) или псевдонимизировано (хэш + соль для поиска)․
  • Логирование: Полный email запрещено писать в логи (access logs‚ error logs‚ audit logs)․ Использовать маскирование: ur@dn․ru или хэш (SHA-256 с солью)․
  • Индексация: Для поиска по email используйте детерминированное шифрование или хэширование (bcrypt/Argon2 не подходят для поиска‚ используйте HMAC-SHA256 с секретным ключом приложения)․
  • Право на удаление: При запросе на удаление (Right to be Forgotten) адрес анонимизируется (замена на deleted_@anonymized․local)‚ статус ставится Blocked‚ связи с профилем разрываются․

Интеграция и обмен данными (API / XML / JSON)

JSON Schema (Фрагмент)

{
 "type": "object"‚
 "properties": {
 "emailAddress": {
 "type": "object"‚
 "required": ["localPart"‚ "domainPart"]‚
 "properties": {
 "localPart": { "type": "string"‚ "maxLength": 64‚ "pattern": "^(?!\․)(?!․\․$)(?!;\․\․)[^\s@]+$" }‚
 "domainPart": { "type": "string"‚ "maxLength": 255‚ "format": "idn-hostname" }‚
 "displayName": { "type": "string"‚ "maxLength": 128 }‚
 "type": { "type": "string"‚ "enum": ["Work"‚ "Personal"‚ "Notification"‚ "System"‚ "Other"] }‚
 "isPrimary": { "type": "boolean"‚ "default": false }‚
 "status": { "type": "string"‚ "enum": ["Active"‚ "Bounced"‚ "Unsubscribed"‚ "PendingVerification"‚ "Blocked"]‚ "default": "PendingVerification" }
 }
 } }
}

XML Schema (XSD Фрагмент)

<xs:complexType name="EmailAddressType_49324">
 <xs:sequence>
 <xs:element name="LocalPart" type="xs:token" minLength="1" maxLength="64"/>
 <xs:element name="DomainPart" type="xs:token" minLength="1" maxLength="255"/>
 <xs:element name="DisplayName" type="xs:string" minOccurs="0" maxOccurs="1" maxLength="128"/>
 <xs:element name="Type" type="EmailTypeEnum" minOccurs="0"/>
 <xs:element name="IsPrimary" type="xs:boolean" default="false" minOccurs="0"/>
 <xs:element name="VerifiedAt" type="xs:dateTime" minOccurs="0"/>
 <xs:element name="Status" type="EmailStatusEnum" default="PendingVerification" minOccurs="0"/>
 </xs:sequence>
</xs:complexType>

<xs:simpleType name="EmailTypeEnum">
 <xs:restriction base="xs:string">
 <xs:enumeration value="Work"/>
 <xs:enumeration value="Personal"/>
 <xs:enumeration value="Notification"/>
 <xs:enumeration value="System"/>
 <xs:enumeration value="Other"/>
 </xs:restriction>
</xs:simpleType>

Чек-лист для разработчика (Definition of Done)

При реализации поддержки Части 49324 убедитесь‚ что:

  • [ ] Реализована серверная валидация по RFC 5322 + профиль 49324 (DNS MX check‚ блок-листы);
  • [ ] Клиентская валидация дублирует серверную (UX)‚ но не заменяет её․
  • [ ] Поддержка Unicode (SMTPUTF8) на входе и корректное преобразование в Punycode для SMTP․
  • [ ] Реализован поток Double Opt-In с токенами и TTL․
  • [ ] Обработка Bounce/Complaint веб-хуков от почтового провайдера (Amazon SES‚ SendGrid‚ Postmark‚ собственный MTA)․
  • [ ] Данные шифруются в БД‚ маскируются в логах․
  • [ ] API соответствует JSON Schema / XSD‚ версия схемы указана в заголовках/URL․
  • [ ] Написаны интеграционные тесты на граничные случаи (квотирование‚ IDN‚ длинные строки‚ инъекции)․

Спецификация Часть 49324 трансформирует понятие «адрес электронной почты» из простой строки в управляемую‚ верифицируемую и безопасную сущность данных․ Строгое следование данному профилю позволяет:

  • Снизить процент недоставленных писем (Bounce Rate) до < 1%․
  • Повысить репутацию домена-отправителя (Sender Reputation)․
  • Обеспечить соответствие законодательству о персональных данных․
  • Стандартизировать интеграции с внешними контрагентами и госсистемами․

Рекомендация: Внедряйте валидацию и верификацию как можно раньше, на этапе ввода пользователем (Frontend) и приема данных от внешних систем (API Gateway)‚ чтобы не загружать базу данных невалидными сущностями․


Документ подготовлен в соответствии с внутренними стандартами архитектуры данных․ Версия спецификации: 49324/Rev․1․ Дата актуализации: 2024․