Как указать имя отправителя при отправке почты через DialMail в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При автоматической рассылке отчетов, уведомлений или ошибок обмена из базы «1С:Предприятие 7.7» часто используется популярная внешняя компонента DialMail. Разработчики нередко сталкиваются с ситуацией, когда в почтовом клиенте получателя отображается только голый электронный адрес (например, ivan@ivanov.ru), а не читаемое имя сотрудника или название организации (например, Иван Иванов или Служба оповещения).

Разберем, почему возникает такая задача, какие ошибки могут возникнуть при некорректном указании параметров и как правильно передать отображаемое имя отправителя через методы компоненты DialMail.

Причина проблемы и типичные ошибки настройки

Рассмотрим стандартный вызов метода создания почтового сообщения в объекте отправки почты компоненты DialMail:


ОтправкаПочты.СоздатьПисьмо(ОтКого, Кому, СокрЛП(СпрПочта.Копии), "Тема сообщения",, "Текст сообщения...");

Если в первый параметр ОтКого передать исключительно текстовое имя (например, "Отправитель письма" или "Иван Иванов"), процесс отправки завершится ошибкой на этапе общения с почтовым сервером по протоколу SMTP.

Проанализируем лог ошибки, возвращаемый компонентой в этом случае:


Успешно создано письмо. Имя файла созданного письма - A09970BE8F9D8001.msg
Подготовка к отправке сообщений, сообщений в очереди - 1
Успешно подключились к серверу SMTP по адресу - smtp.yandex.ru:465
Полученный от сервера ответ - 235 2.7.0 Authentication successful.
Произошла ошибка. Письмо НЕ отправлено !!!
Последняя ошибка (код): -102
Последняя ошибка (описание): FROM OR SIZE
Последний ответ сервера: 501 5.1.7 Bad address mailbox syntax.

Ответ сервера 501 5.1.7 Bad address mailbox syntax указывает на то, что переданная строка не соответствует стандарту синтаксиса почтового адреса RFC. Сервер ожидает валидный e-mail для формирования SMTP-команды MAIL FROM.

Решение: правильное формирование поля «От кого»

Почтовые стандарты RFC 2822 и RFC 5322 позволяют указывать в поле отправителя одновременно и понятное отображаемое имя, и фактический адрес ящика. Для этого адрес заключается в угловые скобки <...>, а имя указывается перед ним.

Выясним, как правильно сформировать строку для передачи в метод СоздатьПисьмо:

  1. Определим реальный e-mail ящика, под которым выполняется авторизация на SMTP-сервере (например, ivan@ivanov.ru).
  2. Сформируем строковое значение, объединяющее имя и почтовый ящик в формате Иван Иванов <ivan@ivanov.ru>.
  3. Передадим полученную строку в качестве первого параметра метода СоздатьПисьмо().

Посмотрим на практический пример кода на языке 1С 7.7:


ИмяОтправителя = "Иван Иванов";
ПочтаОтправителя = "ivan@ivanov.ru";

// Формируем поле отправителя по стандарту RFC
ОтКого = СокрЛП(ИмяОтправителя) + " <" + СокрЛП(ПочтаОтправителя) + ">";
Кому = "client@domain.ru";
Копии = "manager@domain.ru";
Тема = "Ошибки обмена в " + СокрЛП(Константа.Магазин.Наименование);
Текст = "Данное письмо сформировано автоматически из базы 1С 7.7...";

// Создаем письмо в объекте DialMail
Если ОтправкаПочты.СоздатьПисьмо(ОтКого, Кому, Копии, Тема,, Текст) = 0 Тогда
    Предупреждение("Не удалось сформировать письмо: " + ОтправкаПочты.ПолучитьТекстОшибки());
    Возврат;
КонецЕсли;

Важные требования почтовых серверов и протокола SMTP

Разберем ключевые моменты, на которые следует обратить внимание при интеграции отправки почты:

  1. Соответствие авторизации и адреса: Адрес внутри угловых скобок <ivan@ivanov.ru> должен строго совпадать с логином почтового ящика, указанным в настройках SMTP-аутентификации DialMail (либо являться подтвержденным алиасом аккаунта). Если указать чужой адрес, публичные почтовые сервисы отклонят отправку с ошибками доступа или подмены адресата.
  2. Отображение имени: Имя перед угловыми скобками может быть произвольным текстом (например, наименованием подразделения, филиала или ФИО ответственного лица). Почтовый клиент получателя (например, Thunderbird, Outlook, веб-интерфейсы) покажет именно эту строку в качестве имени контакта.
  3. Кодировка и спецсимволы: Если имя содержит знаки препинания (точки, запятые), рекомендуется дополнительно заключать текстовую часть в кавычки: "Иванов, Иван" <ivan@ivanov.ru>.

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

Если по каким-либо причинам использование DialMail невозможно или требуется обойтись без регистрации внешних DLL-библиотек в операционной системе, рассмотрим другие варианты:

  1. Объект CDO.Message: Использование стандартного системного COM-объекта Windows (Collaboration Data Objects). Данный метод доступен на большинстве рабочих станций без установки сторонних компонентов. В объекте CDO.Message свойство From заполняется аналогичным образом:
    
    Письмо = СоздатьОбъект("CDO.Message");
    Письмо.From = """Иван Иванов"" <ivan@ivanov.ru>";
    Письмо.To = "client@domain.ru";
    Письмо.Subject = "Уведомление";
    Письмо.TextBody = "Текст сообщения";
    
  2. Компонента ROM-Mail.dll: Альтернативная внешняя библиотека для 1С 7.7, в которой предусмотрены отдельные свойства для установки имени и электронного адреса отправителя.
  3. Консольные утилиты: Вызов утилит отправки почты через командную строку (КомандаСистемы() или объект WScript.Shell), где параметры адреса и имени отправителя передаются соответствующими ключами запуска.
← На главную