Как отправить письмо с таблицей из 1С и настроить подключение к почте Mail.ru

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

В процессе автоматизации бизнес-процессов часто возникает необходимость информирования пользователей или контрагентов о состоянии документов, остатках товаров или суммах задолженности. Лучший способ представить такие данные в теле письма — это использование HTML-таблиц. В этой статье мы подробно разберем, как сформировать структуру таблицы программно и как решить распространенную проблему с авторизацией на почтовых серверах, таких как Mail.ru.

Формирование HTML-структуры таблицы в 1С

Для того чтобы почтовый клиент получателя отобразил данные в виде таблицы, тело письма должно содержать стандартную разметку HTML. Основными тегами здесь являются <table> (сама таблица), <tr> (строка таблицы) и <td> (ячейка). Рассмотрим процесс формирования такой строки программно.

Проанализируем пример кода, в котором мы обходим массив данных или выборку из запроса и формируем строки таблицы. Очень важно помнить, что современные почтовые клиенты (Outlook, Gmail) лучше всего работают с Inline-стилями (стили, прописанные непосредственно в тегах), так как внешние CSS-блоки часто блокируются в целях безопасности.


// Начнем формирование HTML-строки
ТекстHTML = "<html><body>";
ТекстHTML = ТекстHTML + "<p>Добрый день! Направляем вам данные по документам:</p>";
ТекстHTML = ТекстHTML + "<table border='1' style='border-collapse: collapse; width: 100%;'>";
ТекстHTML = ТекстHTML + "<tr style='background-color: #f2f2f2;'>
              |<th>№ документа</th>
              |<th>Сумма</th>
              |<th>Комментарий</th></tr>";

// Допустим, у нас есть выборка из запроса ВыборкаДанных
Пока ВыборкаДанных.Следующий() Цикл
    ТекстHTML = ТекстHTML + "<tr>";
    ТекстHTML = ТекстHTML + "<td style='padding: 5px;'>" + ВыборкаДанных.Номер + "</td>";
    ТекстHTML = ТекстHTML + "<td style='padding: 5px; text-align: right;'>" + Формат(ВыборкаДанных.Сумма, "ЧДЦ=2") + "</td>";
    ТекстHTML = ТекстHTML + "<td style='padding: 5px;'>" + ?(ЗначениеЗаполнено(ВыборкаДанных.Комментарий), ВыборкаДанных.Комментарий, "&nbsp;") + "</td>";
    ТекстHTML = ТекстHTML + "</tr>";
КонецЦикла;

ТекстHTML = ТекстHTML + "</table>";
ТекстHTML = ТекстHTML + "</body></html>";

Обратите внимание на использование &nbsp; в пустых ячейках. Это неразрывный пробел, который предотвращает «схлопывание» границ пустой ячейки в некоторых старых версиях почтовых программ. Также мы применили функцию Формат(), чтобы суммы выглядели профессионально.

Создание почтового сообщения и отправка

После того как текст письма готов, нам необходимо создать объект ИнтернетПочтовоеСообщение и правильно указать тип текста. Если не указать тип текста как HTML, получатель увидит просто набор тегов.


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = "Отчет по документам";
Письмо.Отправитель.Адрес = "mymail@mail.ru";
Письмо.ИмяОтправителя = "Робот 1С";
Письмо.Получатели.Добавить("client@example.com");

// Указываем тип текста HTML
НовыйТекст = Письмо.Тексты.Добавить(ТекстHTML);
НовыйТекст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

Решение проблемы с авторизацией: Пароль приложения

Часто программисты сталкиваются с ошибкой: «SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya». Выясним причину этой ошибки. Современные сервисы (Mail.ru, Yandex, Gmail) запрещают использование основного пароля от почты для входа через сторонние программы (такие как 1С) по протоколу SMTP.

Для решения этой проблемы выполним следующие шаги:

  1. Зайдите в настройки вашего почтового ящика через браузер.
  2. Перейдите в раздел «Безопасность» или «Пароли и двухфакторная аутентификация».
  3. Найдите пункт «Пароли для внешних приложений».
  4. Создайте новый пароль, выбрав тип «1С» или «Прочее». Система сгенерирует уникальный 16-значный код.
  5. Именно этот код (без пробелов) нужно вставить в поле Пароль в настройках профиля 1С вместо вашего обычного пароля.

Настройка профиля почты в 1С

Рассмотрим, как правильно настроить объект ИнтернетПочтовыйПрофиль для работы с Mail.ru с учетом современных требований безопасности (SSL).


Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 465;
Профиль.ПользовательSMTP = "mymail@mail.ru";
Профиль.ПарольSMTP = "ваш_пароль_приложения"; // Здесь вставляем 16-значный код
Профиль.ИспользоватьSSLSMTP = Истина;
Профиль.ТолькоЗащищенныйВходSMTP = Истина;
Профиль.Таймаут = 60;

Почта = Новый ИнтернетПочта;
Попытка
    Почта.Подключиться(Профиль);
    Почта.Послать(Письмо);
    Почта.Отключиться();
    Сообщить("Письмо успешно отправлено!");
Исключение
    Сообщить("Ошибка при отправке: " + ОписаниеОшибки());
КонецПопытки;

Альтернативный метод: Использование Табличного документа

Если вам нужно отправить сложную таблицу с объединением ячеек и сложным форматированием, разберем более простой способ — использование ТабличногоДокумента. Вы можете программно заполнить макет, а затем сохранить его в формате HTML.

Проанализируем последовательность действий:

  1. Создаем ТабличныйДокумент и заполняем его данными.
  2. Сохраняем его во временный файл как HTML с помощью метода Записать(ИмяФайла, ТипФайлаТабличногоДокумента.HTML).
  3. Читаем содержимое файла в строку и используем как тело письма.

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

Важный нюанс: Убедитесь, что в настройках почтового ящика (в веб-интерфейсе) разрешен доступ по протоколу SMTP. В некоторых корпоративных почтах он может быть отключен по умолчанию администратором безопасности.

← На главную