Как правильно задать имя и адрес отправителя в ИнтернетПочтовоеСообщение в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При программной отправке электронных писем через механизм ИнтернетПочта разработчики часто сталкиваются с ситуацией, когда свойству Отправитель объекта ИнтернетПочтовоеСообщение пытаются присвоить обычную строку, но в отладчике тип данных остается ИнтернетПочтовыйАдрес. Кроме того, нередко возникает задача передать произвольное отображаемое имя (Display Name), чтобы получатель в почтовой программе видел, например, название организации, а не голый email-адрес.

Разберем по шагам, как устроена типизация объекта ИнтернетПочтовоеСообщение, как корректно заполнять реквизиты отправителя и почему почтовые клиенты (в частности, Microsoft Outlook) или почтовые серверы могут подменять переданное имя.

Особенности типизации свойства Отправитель в 1С

В синтакс-помощнике платформы указано, что свойство Отправитель может принимать значения типа Строка или ИнтернетПочтовыйАдрес. Однако на практике платформа выполняет автоматическое неявное приведение типов:

  1. Когда мы присваиваем свойству Отправитель обычную строку, платформа 1С автоматически инициализирует объект ИнтернетПочтовыйАдрес и записывает переданный текст в его свойство Адрес.
  2. В результате само свойство Отправитель всегда сохраняет тип ИнтернетПочтовыйАдрес. Преобразовать этот реквизит в примитивный строковый тип невозможно, так как это внутренняя особенность реализации почтового механизма платформы.

Следовательно, прямое обращение к свойству через точку или присвоение строки являются эквивалентными операциями:


// Вариант 1: Прямое присвоение строки (платформа сама заполнит Адрес)
Письмо.Отправитель = "sales@company.ru";

// Вариант 2: Явное заполнение свойства объекта ИнтернетПочтовыйАдрес
Письмо.Отправитель.Адрес = "sales@company.ru";

Как задать отображаемое имя отправителя

Чтобы письмо приходило с понятным человекочитаемым именем (например, «ООО Ромашка <sales@company.ru>»), в объекте ИнтернетПочтовоеСообщение предусмотрено специальное строковое свойство ИмяОтправителя. Также у самого объекта ИнтернетПочтовыйАдрес доступно свойство ОтображаемоеИмя.

Проанализируем приоритеты, по которым платформа формирует заголовок письма From:

  1. Наивысший приоритет имеет свойство ИнтернетПочтовоеСообщение.ИмяОтправителя. Если оно заполнено, платформа использует именно его в качестве Display Name.
  2. Если свойство ИмяОтправителя не заполнено, платформа берет значение из ИнтернетПочтовоеСообщение.Отправитель.ОтображаемоеИмя.
  3. Если ни одно из полей с именем не заполнено, в заголовке отправляется только email-адрес из Письмо.Отправитель.Адрес.

Посмотрим на пример комплексного формирования и заполнения почтового сообщения:


Письмо = Новый ИнтернетПочтовоеСообщение;

// Заполнение текста и типа содержимого
Текст = Письмо.Тексты.Добавить(ТаблицаЗаказа);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

// Тема сообщения
Письмо.Тема = СокрЛП(Строка(Объект.Поставщик)) + ", " + СокрЛП(Строка(Объект.Ссылка));

// Явное указание кодировки для корректного отображения кириллицы
Письмо.Кодировка = "UTF-8";

// Установка адреса и отображаемого имени отправителя
Письмо.Отправитель.Адрес = СокрЛП(Строка(ЭлектроннаяПочта.ИмяПользователя));
Письмо.ИмяОтправителя = СокрЛП(Строка(НаименованиеОрганизации)) + ", " + СокрЛП(Строка(ЮридическийАдрес));

// Добавление получателей
Письмо.Получатели.Добавить(СокрЛП(Объект.Поставщик.Сотрудник.ЭлектроннаяПочта));

Почему Outlook или почтовый сервер игнорируют ИмяОтправителя

Если в коде 1С все свойства заполнены корректно, но получатель в Outlook видит только логин или адрес до знака @, выясним причины такого поведения:

  1. Политика безопасности почтового сервиса (SMTP Anti-Spoofing): Большинство публичных сервисов (Яндекс 360, Mail.ru, Gmail) и корпоративных серверов при SMTP-авторизации принудительно перезаписывают заголовок отправителя тем именем, которое задано в профиле учетной записи на самом почтовом сервере. В таком случае имя необходимо настроить непосредственно в панели управления почтового ящика.
  2. Кэш контактов и адресная книга Outlook: Если адрес отправителя уже сохранен в контактах получателя, в локальном кэше автоподстановки или в глобальном списке адресов Exchange (GAL), Microsoft Outlook полностью игнорирует пришедший из письма Display Name и подставляет сохраненное локально имя.
  3. Кодировка кириллических заголовков: Если в ИмяОтправителя передается кириллица, а кодировка письма не определена явно, почтовый клиент может не распарсить заголовок MIME и отобразить только безопасную ASCII-часть — адрес электронной почты. Рекомендуется явно указывать Письмо.Кодировка = "UTF-8";.

Альтернативные способы отправки

Если SMTP-сервер жестко блокирует подмену имени отправителя или требуется более тесная интеграция с локальным почтовым клиентом, можно рассмотреть альтернативные варианты:

  1. Использование объекта Почта (MAPI): Отправка письма через системный MAPI-клиент, установленный на рабочем месте пользователя.
  2. COM-соединение с Outlook: Создание письма через объект Новый COMОбъект("Outlook.Application"), где управление заголовками и учетными записями выполняется средствами локального профиля MS Outlook.
  3. Отправка через HTTP API почтового провайдера: Использование REST API сервиса рассылок, где параметры письма передаются в формате JSON напрямую в обход стандартного SMTP-протокола.
← На главную