При разработке или доработке механизмов рассылки расчетных листков в 1С:Зарплата и Управление Персоналом (особенно в старых редакциях типа 2.0) программисты часто совершают критическую ошибку: жестко прописывают логин и пароль почтового ящика прямо в исходном коде обработки. Это создает массу проблем: от невозможности сменить отправителя силами пользователя до серьезных рисков безопасности. В данной статье мы разберем, как правильно перевести рассылку на использование системных механизмов 1С и подружить программу с современными требованиями почтовых серверов.
Рассмотрим типовую ситуацию, представленную в коде автора темы. Использование объекта ИнтернетПочтовыйПрофиль с заполнением полей вручную выглядит так:
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПарольSMTP = "хххххххххх";
Профиль.ПользовательSMTP = "яяя@mail.ru";
Профиль.ИспользоватьSSLSMTP = Истина;
Проблема заключается в том, что при необходимости сменить почтовый ящик (например, перейти на корпоративный домен softlinebpo.ru) пользователю или администратору приходится обращаться к программисту для правки кода. Более того, современные почтовые сервисы (Mail.ru, Yandex, Gmail) требуют использования специальных «паролей приложений», и обычный пароль от почты просто не сработает, вызывая ошибки аутентификации.
Самый правильный путь — использовать встроенный справочник 1С Учетные записи электронной почты. Это позволяет вынести все технические настройки (сервер, порт, SSL, логин, пароль) в интерфейс пользователя. Проанализируем, как изменить код для получения настроек из этого справочника.
Вместо ручного заполнения полей ИнтернетПочтовыйПрофиль, мы будем использовать ссылку на элемент справочника. Разберем по шагам реализацию:
УчетнаяЗапись с типом СправочникСсылка.УчетныеЗаписиЭлектроннойПочты.Пример кода для получения настроек в типовой конфигурации:
// Получаем профиль из справочника
СсылкаНаУчетку = Объект.УчетнаяЗапись; // Реквизит на форме
Профиль = РаботаЭлектроннойПочтой.ПолучитьИнтернетПочтовыйПрофиль(СсылкаНаУчетку);
// Теперь объект Профиль заполнен автоматически из настроек 1С
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
// Логика отправки письма
Почта.Отправить(Сообщение);
Почта.Отключиться();
Исключение
Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;
Часто при настройке почты пользователи сталкиваются с ошибкой: «POP3 is available only with SSL or TLS connection enabled». Это происходит потому, что старые методы подключения используют незащищенные порты (например, 25 или 110), которые современные серверы блокируют.
Выясним причину и устраним ее. Для корректной работы через smtp.mail.ru или корпоративные серверы необходимо соблюдать следующие параметры:
ИспользоватьSSLSMTP = Истина.ИспользоватьSSLPOP3 = Истина.ИспользоватьSSLIMAP = Истина.Если вы используете справочник учетных записей, просто убедитесь, что в форме настройки записи установлены соответствующие галочки «Использовать защищенное соединение (SSL)». В программном коде, если вы всё же заполняете профиль вручную, это выглядит так:
Профиль.ПортSMTP = 465;
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищеннаяАутентификацияSMTP = Ложь;
Проанализируем ситуацию, когда логин и пароль верны, SSL включен, но 1С всё равно не может подключиться. С 2022 года почтовые сервисы запретили авторизацию через «небезопасные» приложения (к которым они относят и 1С) по основному паролю от ящика.
Разберем алгоритм действий для настройки:
Пароль в 1С вместо вашего обычного пароля.Важно: Этот пароль вводится один раз и обеспечивает безопасный доступ только для 1С. Основной пароль от почты при этом менять не нужно.
Если ваш клиент хочет отправлять письма с собственного домена (например, softlinebpo.ru), следует учитывать специфику корпоративных почтовых серверов. Рассмотрим основные моменты:
1. Настройка SPF и DKIM. При массовой рассылке расчетных листков (сотни писем за раз) принимающие сервера сотрудников (Gmail, Mail.ru) могут пометить письма как спам. Чтобы этого не произошло, системный администратор клиента должен прописать в DNS домена записи SPF и DKIM, разрешающие отправку писем с IP-адреса сервера 1С.
2. Лимиты сервера. Многие SMTP-серверы имеют ограничения на количество писем в минуту или час. Проанализируем код рассылки: если писем много, желательно реализовать отправку порциями с небольшой паузой. Рассмотрим пример упрощенного цикла с паузой:
Для Каждого Сотрудник Из СписокСотрудников Цикл
// Подготовка сообщения...
Почта.Отправить(Сообщение);
// Каждые 50 писем делаем паузу 10 секунд
Если Счетчик % 50 = 0 Тогда
Приостановить(10);
КонецЕсли;
Счетчик = Счетчик + 1;
КонецЦикла;
Подведем итог проделанной работы. Для создания надежного механизма рассылки расчетных листков мы:
Такой подход делает решение гибким, безопасным и соответствующим современным стандартам разработки на платформе 1С.