Как отправить электронное письмо из внешней обработки 1С:Бухгалтерия 3.0 в сервисе 1С:Фреш и пройти аудит?

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

При разработке дополнительных обработок для работы в облачном сервисе 1С:Фреш (модель SaaS) мы часто сталкиваемся с необходимостью взаимодействия с внешними ресурсами, например, с отправкой электронной почты. В отличие от локальной файловой или клиент-серверной базы, 1С:Фреш работает в строгом безопасном режиме, который по умолчанию запрещает любое прямое обращение к интернет-ресурсам. Это сделано для обеспечения максимальной безопасности данных пользователей и стабильности работы всего сервиса. Если мы попытаемся отправить электронное письмо из обработки, которая успешно работает на обычной базе, то при загрузке во Фреш она будет возвращена аудитом с ошибкой, указывающей на нарушение правил безопасности.

В этой статье мы подробно рассмотрим, почему возникают такие ошибки, чего именно требуют аудиторы 1С, и какие есть способы решения проблемы с отправкой электронной почты из внешних обработок в 1С:Бухгалтерии 3.0 в сервисе 1С:Фреш.

1. Понимание ограничений 1С:Фреш и требований аудита

Прежде чем перейти к решениям, давайте разберемся в корне проблемы. Сервис 1С:Фреш функционирует в так называемом безопасном режиме. Это означает, что для любого взаимодействия вашей дополнительной обработки с внешним миром (интернет-ресурсы, файловая система вне разрешенных областей) требуется явное разрешение. Без такого разрешения любая попытка обращения будет заблокирована платформой.

  1. Безопасный режим (SaaS-модель): Что это такое, почему он важен? 1С:Фреш — это облачный сервис, где множество пользователей работают в единой инфраструктуре. Чтобы обеспечить безопасность данных каждого пользователя и предотвратить злонамеренные или ошибочные действия одной обработки, влияющие на другие, введены жесткие ограничения. По умолчанию платформа блокирует прямой доступ к сторонним интернет-ресурсам, таким как почтовые серверы, HTTP-сервисы, FTP-ресурсы и т.д. Эти ограничения распространяются на все протоколы: SMTP, HTTP, HTTPS, IMAP, POP3, FTP, FTPS, WS, WSS.

  2. Аудит 1С:Фреш: Каждая дополнительная обработка, отчет или расширение, которые мы хотим загрузить в 1С:Фреш, проходит обязательную проверку (аудит) со стороны фирмы "1С". Цель аудита – не только проверить код на отсутствие вредоносных действий, но и на соответствие стандартам разработки, стабильность работы и корректное использование ресурсов сервиса. Одной из ключевых проверок является как раз доступ к внешним ресурсам. Если обработка пытается получить такой доступ без явного запроса разрешения или некорректно его описывает, она будет возвращена с ошибкой.

  3. Типовая ошибка аудита: Как видим из сообщения автора темы, аудиторы четко указывают: "в серверном контексте в безопасном режиме запрещено обращение к сторонним интернет ресурсам. Для отправки электронного письма требуется разрешение на использование протокола интернет почты." Это означает, что даже типовая функция РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение, которая на локальной базе работает без проблем, во Фреше требует предварительного разрешения.

Итак, наша задача — сообщить платформе и аудиторам, что нашей обработке требуется доступ к почтовому серверу, и объяснить, зачем это нужно.

2. Программное получение разрешений на использование интернет-ресурса

Этот способ является основным и наиболее прямым для решения проблемы, как было показано в обсуждении на форуме. Он позволяет нашей обработке явно запросить и получить необходимое разрешение на доступ к почтовому серверу.

  1. Метод РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса: Для запроса разрешений мы будем использовать функцию РазрешениеНаИспользованиеИнтернетРесурса из общего модуля РаботаВБезопасномРежиме, который является частью Библиотеки Стандартных Подсистем (БСП). Эта функция специально разработана для работы в условиях безопасного режима 1С:Фреш и позволяет нам описать требуемый доступ.

  2. Место добавления кода: Код для запроса разрешений необходимо добавить в функцию СведенияОВнешнейОбработке(ПараметрыРегистрации) модуля объекта вашей дополнительной обработки. Эта функция является "точкой входа" для платформы, чтобы получить метаданные о нашей обработке, включая ее возможности и необходимые разрешения. Платформа вызывает ее при регистрации или обновлении обработки.

  3. Пример кода: Давайте рассмотрим пример кода, который решил проблему автора темы:

    
    // В модуле объекта внешней обработки, в функции СведенияОВнешнейОбработке(ПараметрыРегистрации)
    // ... (другой код функции)
    
    // Запрашиваем разрешение на использование интернет-ресурса для отправки почты
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("SMTP", "mail.ru", , "Отправка электронной почты");
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    // ... (другой код функции)
    
  4. Разберем параметры функции РазрешениеНаИспользованиеИнтернетРесурса:

    • Протокол (строка): Мы должны указать, какой протокол связи будем использовать. Для отправки электронной почты это "SMTP". Если бы мы обращались к веб-сервису, то указывали бы "HTTP" или "HTTPS".

    • АдресРесурса (строка): Это критически важный параметр. Здесь мы указываем адрес почтового сервера, к которому будет выполняться обращение. В примере указан "mail.ru". Очень важно: если мы знаем точный адрес SMTP-сервера (например, smtp.mail.ru, smtp.yandex.ru, smtp.gmail.com), следует указывать его максимально точно. Если же список почтовых серверов для контрагентов заранее неизвестен и может быть произвольным, ситуация усложняется. В таких случаях аудиторы 1С:Фреш могут потребовать реализации интерактивного запроса у пользователя перед каждой операцией отправки, с явным указанием адреса, к которому выполняется обращение, и возможностью сохранения полученного ответа для последующих операций.

    • Порт (число): Этот параметр является необязательным. Он указывает порт, используемый для соединения с сервером. Для SMTP стандартными портами являются 25 (без шифрования), 465 (с использованием SSL/TLS) или 587 (с использованием STARTTLS). Если мы не указываем порт, платформа может использовать стандартные порты для данного протокола. В примере порт не указан.

    • Описание (строка): Это человекочитаемое описание, объясняющее причину запроса разрешения. Оно будет показано пользователю при установке обработки и проанализировано аудитором. Важно, чтобы описание было четким и понятным, например, "Отправка электронной почты".

  5. Добавление разрешения в параметры регистрации: После того как мы создали объект Разрешение с нужными параметрами, мы добавляем его в коллекцию ПараметрыРегистрации.Разрешения. Именно эта коллекция сообщает платформе обо всех необходимых разрешениях для нашей обработки.

  6. Процесс после добавления кода: Когда мы загрузим обработку с этим кодом в 1С:Фреш и она пройдет аудит, при ее установке или обновлении система проверит указанные разрешения. Пользователю может быть выдан диалог с запросом на подтверждение доступа к указанному интернет-ресурсу. Таким образом, соблюдаются требования безопасности, и пользователь осознанно дает согласие на выполнение операций.

3. Использование типовых механизмов рассылки БСП

Для задач, связанных с регулярной отправкой отчетов или уведомлений, 1С настоятельно рекомендует использовать встроенные механизмы Библиотеки Стандартных Подсистем (БСП). Эти механизмы уже адаптированы для работы в 1С:Фреш и обладают всеми необходимыми разрешениями.

  1. Преимущества использования БСП:

    • Готовое решение: Механизмы рассылок уже реализованы и протестированы.

    • Соответствие требованиям 1С:Фреш: Они изначально разработаны с учетом особенностей безопасного режима и прошли аудит. Это значительно упрощает процесс публикации вашей доработки.

    • Централизованное управление: Рассылки управляются из типового интерфейса, что удобно для пользователей и администраторов.

    • Использование предустановленных учетных записей: 1С:Фреш имеет настроенные почтовые учетные записи, которые можно использовать для рассылок, не требуя от вас создания и конфигурирования новых.

  2. Настройка рассылки отчетов:

    Если вы собираете данные в отдельный внешний отчет и хотите отправлять его по электронной почте, вам не обязательно реализовывать собственную логику отправки. Вместо этого вы можете:

    • Создать свой внешний отчет.

    • Загрузить его в базу 1С:Фреш (после прохождения аудита).

    • Перейти в раздел "Администрирование" в конфигурации.

    • Выбрать пункт "Печатные формы и обработки".

    • Найти и настроить "Рассылки отчетов" (или аналогичный пункт, название может немного отличаться в зависимости от версии БСП и конфигурации).

  3. Что можно настроить в типовых рассылках:

    • Расписание: Мы можем определить, как часто (ежедневно, еженедельно, ежемесячно) и в какое время будет выполняться рассылка.

    • Получатели: Указать конкретных адресатов (контрагентов, сотрудников), которым будут отправляться письма.

    • Формат вложений: Выбрать удобный формат для прикрепляемого отчета (например, PDF, Excel, HTML).

    • Тема и текст письма: Сформировать информативную тему и основной текст электронного сообщения.

    • Выбор отчета: Указать, какой именно отчет нужно рассылать.

  4. Когда использовать: Этот подход идеален, если наша задача — это отправка готовых отчетов, стандартизированных уведомлений или регулярных сводок. Он значительно упрощает процесс разработки и прохождения аудита, так как мы используем уже одобренный функционал платформы.

4. Перенос отправки почты на клиентскую сторону

Один из участников дискуссии предложил интересный подход, который позволяет полностью обойти серверные ограничения на доступ к интернет-ресурсам — перенести логику формирования и отправки письма на сторону клиента. Этот метод требует участия пользователя, но может быть полезен в определенных сценариях.

  1. Суть подхода: Вместо того чтобы сервер 1С:Фреш напрямую обращался к почтовому серверу для отправки письма, мы можем сформировать все данные письма (тему, текст, вложения) на серверной стороне, передать их на клиентскую сторону (в тонкий клиент или веб-браузер пользователя) и уже там инициировать отправку письма через локальный почтовый клиент пользователя (например, Microsoft Outlook, Mozilla Thunderbird или даже веб-интерфейс почтового сервиса).

  2. Пример реализации (концептуально):

    • Серверная часть вашей обработки собирает необходимые данные (например, данные о контрагенте, сформированный документ или отчет).

    • Формирует содержимое письма: тему, текст сообщения, возможно, создает временные файлы для вложений.

    • Передает эти данные на клиентскую сторону. Это может быть сделано через возвращаемое значение функции или, например, путем создания ссылки на временное хранилище для вложений.

    • На клиенте с помощью программного интерфейса 1С (например, используя объекты ИнтернетПочтовоеСообщение и метод ПоместитьВоВременноеХранилище для вложений) или даже через вызов внешних компонент/скриптов (если это разрешено и возможно в конкретной среде) открывается новое почтовое сообщение в локальном почтовом клиенте пользователя. При этом поля "Кому", "Тема", "Текст" и вложения уже предзаполнены.

    • Пользователь вручную проверяет письмо и нажимает кнопку "Отправить" в своем почтовом клиенте.

  3. Преимущества этого подхода:

    • Обходит серверные ограничения: Мы полностью избегаем проблем с безопасным режимом 1С:Фреш, так как прямое обращение к интернету происходит не с сервера 1С, а с рабочего места пользователя.

    • Не требует программных разрешений: Вам не нужно добавлять в вашу обработку код для получения разрешений РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса, что упрощает разработку и прохождение аудита в части интернет-доступа.

  4. Недостатки и ограничения:

    • Потеря универсальности и автоматизации: Это решение требует непосредственного участия пользователя. Мы не можем отправлять письма в фоновом режиме, по расписанию или полностью автоматизировано без человеческого вмешательства.

    • Зависимость от клиентского ПО: Корректная работа зависит от того, установлен ли у пользователя почтовый клиент, настроен ли он правильно и является ли почтовым клиентом по умолчанию.

    • Менее автоматизированный процесс: Увеличивается количество ручных операций для пользователя, что может быть неприемлемо для массовых рассылок.

  5. Когда использовать: Этот вариант может быть полезен, если требуется гибкость в выборе почтового клиента пользователем, если отправка писем не является массовой автоматизированной задачей, или если по каким-то причинам программное получение разрешений невозможно или нежелательно.

5. Дополнительные рекомендации и подводные камни при работе в 1С:Фреш

Помимо основных способов решения проблемы, есть несколько важных моментов и рекомендаций, которые помогут вам при разработке и публикации доработок для 1С:Фреш.

  1. Избегайте ПривилегированныйРежим = Истина: Один из участников форума упомянул про эту строку. Использование ПривилегированныйРежим = Истина в серверном коде означает, что этот участок кода выполняется с полными правами, игнорируя настройки безопасности пользователя. В 1С:Фреш использование привилегированного режима без крайней необходимости крайне не рекомендуется и, скорее всего, будет причиной отказа в аудите. Если вам требуются привилегированные действия, их следует реализовывать через типовые механизмы БСП, где это предусмотрено и контролируется.

  2. Точность в описании ресурсов: Всегда указывайте максимально точные адреса интернет-ресурсов (например, smtp.yandex.ru вместо просто yandex.ru или mail.ru) и протоколы в запросах на разрешение. Чем точнее мы опишем, к чему обращаемся, тем легче аудиторам оценить безопасность, и тем меньше вопросов возникнет.

  3. Исчерпывающее описание: При запросе разрешения обязательно давайте понятное и исчерпывающее описание причины, по которой вашей обработке требуется доступ к внешним ресурсам. Это не только требование аудита, но и хорошая практика для информирования пользователя.

  4. Типовые ошибки аутентификации (SMTP error code 535): Если после получения разрешений вы все еще сталкиваетесь с ошибками при отправке почты, такими как "SMTP error code 535" или "Authentication failed", это часто указывает на проблемы с аутентификацией на почтовом сервере. Проверьте:

    • Актуальность логина и пароля: Убедитесь, что в настройках учетной записи электронной почты в 1С (раздел "Администрирование" - "Органайзер" - "Настройки почты" или аналогичный) введены актуальные логин и пароль.

    • Специальные пароли для приложений: Некоторые популярные почтовые сервисы (например, Mail.ru, Google Gmail, Yandex) для повышения безопасности требуют создания специального пароля для сторонних приложений, который отличается от вашего основного пароля к почтовому ящику. Если вы используете такой сервис, вам может потребоваться сгенерировать такой пароль в настройках вашего почтового аккаунта и использовать его в 1С.

    • Настройки безопасности аккаунта: Иногда настройки безопасности вашего почтового аккаунта могут блокировать попытки входа с "неизвестных" приложений или IP-адресов. Возможно, потребуется временно разрешить доступ для менее защищенных приложений или подтвердить попытку входа.

  5. Ограничения на выполнение кода: Помните, что в 1С:Фреш существуют строгие лимиты на выполнение серверного кода внешних обработок. Эти ограничения установлены для поддержания общей стабильности и производительности сервиса:

    • Время выполнения серверного вызова: Не более 2400 секунд (40 минут). Длительные операции, например, отправка очень большого количества писем или формирование сложных данных, могут столкнуться с этим ограничением.

    • Объем используемой памяти: Не более 4 ГБ. Обработки, которые потребляют много памяти при своей работе, могут быть принудительно остановлены.

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

  6. Взаимодействие с партнером 1С: Загрузка доработок и их отправка на аудит в 1С:Фреш, как правило, осуществляется через авторизованных партнеров 1С. Если вы являетесь разработчиком, но ваша организация не является партнером 1С, вам необходимо обратиться к своей обслуживающей организации (партнеру 1С) для выполнения этой процедуры. Партнер поможет вам с техническими вопросами и прохождением всех этапов публикации.

  7. Тщательное тестирование: Перед отправкой обработки на аудит, проводите всестороннее тестирование. Не ограничивайтесь локальной файловой базой. Если у вас есть доступ к тестовой среде 1С:Фреш, обязательно тестируйте там. Проверяйте работу обработки в тонком и веб-клиентах, под разными профилями пользователей (с полными правами и ограниченными) для выявления возможных проблем безопасности и функциональности.

Надеемся, что эти подробные объяснения и примеры помогут вам успешно отправлять электронные письма из ваших обработок в 1С:Фреш и проходить аудит без проблем.

← На главную