Почта в 1С - V7Mail, ROM-Mail
В хозяйственной деятельности многих предприятий часто возникает необходимость отправки и приёма сообщений по электронной почте в программе "1С:Предприятие". Как правило, чаще всего выполняется отправка почтовых сообщений из программы. Сообщения могут отправляться по разным поводам. Например, нужно отправить электронное
письмо клиенту или поставщику. Или необходимо автоматизировать процесс формирования счёта-фактуры в формате PDF с последующей отправкой созданного файла по электронной почте. Или, с целью соблюдения безопасности и предотвращения ошибок, будет полезным посылать электронные извещения начальнику отдела продаж о том, скажем, что один из менеджеров дал клиенту скидку больше установленной величины. Поводов для отправки почтовых сообщений по электронной почте, на самом деле, может быть много и разных.
Предлагаю рассмотреть несколько внешних компонент, с помощью которых можно работать с электронной почтой в программе "1С:Предприятие".
- V7Mail
- ROM-Mail
V7Mail
Для того, чтобы удовлетворить потребности пользователей программы "1С:Предприятие" и расширить функциональные возможности программы,
фирма "1С" выпустила внешнюю компоненту V7Plus, в состав которой входит объект V7Mail, предназначенный для отправки и получения электронных почтовых сообщений. Ниже представлен пример использования объекта V7Mail для отправки электронного почтового сообщения.
//функция выполняет отправку электронного сообщения с использованием объекта V7Mail внешней компоненты V7Plus
Процедура ОтправитьПочту()
Если ЗагрузитьВнешнююКомпоненту("V7Plus.dll")=0 Тогда
Сообщить("Не удалось загрузить файл V7Plus.dll");
Возврат;
КонецЕсли;
//
Почта=СоздатьОбъект("AddIn.V7Mail");
Почта.Подключиться();
Почта.НовоеСообщение();
Почта.Заголовок=ТемаПисьма;
Почта.Текст=ТекстПисьма;
//получатели
Почта.ДобавитьАдрес(АдресПолучателя);
//вложения
Для й=1 По Вложения.РазмерСписка() Цикл
ТекФайл=Вложения.ПолучитьЗначение(й);
Почта.ДобавитьФайл(ТекФайл);
КонецЦикла;
//отправка
Почта.Послать();
Почта.Отключиться();
КонецПроцедуры
Объект V7Mail внешней компоненты V7Plus всем хорош за исключением одного маленького недостатка, который может существенно снизить комфорт от работы с программой "1С:Предприятие". Дело в том, что объект V7Mail внешней компоненты V7Plus использует системный MAPI интерфейс для отправки почты, поэтому электронное сообщение будет фактически уходить через почтовый клиент, используемый в системе для отправки почты по умолчанию. Для пользователей такая система отправки сообщений не удобна, потому что требует нажатия на кнопки диалоговых окон, появляющихся на экране монитора в ходе отправки почты.
Внешняя компонента ROM-Mail
Для того, чтобы оптимизировать процедуру отправки электронной почты и
избавить пользователей от необходимости отвечать на дополнительные вопросы системы, я рекомендую использовать внешнюю компоненту ROM-Mail.
Внешняя компонента ROM-Mail не использует MAPI интерфейс и работает по протоколам SMTP и POP3 напрямую. Другими словами, это самостоятельный почтовый клиент, работающий в программе "1С:Предприятие".
Компонента ROM-Mail имеет такие функции:
- поддержка стандартов MIME, UU-ENCODE
- кодирование Base64 и QuotedPrintable
- поддерживаются основные таблицы кодировок кириллицы: DOS, Windows-1251, KOI8-R, MAC
- сообщения, состоящие из нескольких частей (multipart)
- отправка, получение, сохранение вложенных файлов (attachment)
- отправка тела сообщения в форматах ТЕКСТ (plain/text), HTML (plain/html), RTF (richable)
- доступ как к указанной строке тела сообщения (построчное чтение) так и получение всего тела сразу
- использование полей CC (копия), BCC (скрытая копия)
- настройка параметров соединения на странице свойств компоненты
- сохранение соединения (keep alive)
- настройка аутентификации на странице свойств
- возможность установки произвольного значения полей АдресОтправителя (From) и ИмяОтправителя (FromName), в том числе оставлять эти значения пустыми
- выбор вида аутентификации при входе на SMTP-сервер (None, Login)
- возможность выбора: забирать или оставлять сообщения на сервере
- возможность установки каталога для сохранения вложений
- пометка/снятие пометки на удаление
- перекодировка (Строка, Флаг), метод реализует 20 направлений перекодировки в различные таблицы кодировок
- пингование Ping (Host), метод возвращает процент потерь, атрибут PingText содержит строку-результат выполнения метода Ping.
Из приведённого списка видно, что внешняя компонента ROM-Mail обладает по сравнению с внешней компонентой V7Plus намного большим набором методов и функций, которые значительно повышают эффективность работы с электронной почтой в программе "1С:Предприятие". Ниже представлен образец программного кода, описывающего отправку электронной почты из программы "1С:Предприятие" с использованием внешней компоненты ROM-Mail.
//функция выполняет отправку электронного сообщения с использованием внешней компоненты ROM-Mail
Процедура ОтправитьПочту()
Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll")=0 Тогда
Сообщить("Не удалось загрузить внешнюю компоненту ROM-Mail.dll");
Возврат;
КонецЕсли;
//подключение
Почта=СоздатьОбъект("AddIn.AddInMail");
Почта.СерверОтправки=СокрЛП(СерверОтправки);
Почта.ПортОтправки=СокрЛП(ПортОтправки);
Почта.АутентификацияПриОтправке=ФлагАутентификация;
Если Почта.Соединение=0 Тогда
Если Почта.Подключиться("Отправка")=0 Тогда
Сообщить("Не удалось подключиться к почтовому серверу","!");
Возврат;
КонецЕсли;
КонецЕсли;
//сообщение
Почта.Важность=0;
Почта.Кодировка="windows-1251";
Почта.ТипПисьма=2;
Почта.АдресОтправителя=СокрЛП(АдресОтправителя);
Почта.ИмяОтправителя=СокрЛП(ИмяОтправителя);
//получатели
Почта.ДобавитьАдрес("АдресПолучателя",СокрЛП(ИмяПолучателя), СокрЛП(АдресПолучателя));
//вложения
Для й=1 По Вложения.РазмерСписка() Цикл
Почта.Вложения=Почта.Вложения+Вложения.ПолучитьЗначение(й)+";";
КонецЦикла;
Почта.Тема=СокрЛП(ТемаПисьма);
Почта.Тело=СокрЛП(ТекстПисьма);
//отправка
Если Почта.Соединение=0 Тогда
Сообщить("Соединение потеряно","!");
ИначеЕсли Почта.Отправить()=1 Тогда
Сообщить("Почтовое сообщение отправлено","i");
Иначе
Сообщить("Не удалось отправить сообщение","!");
КонецЕсли;
//отключение
Почта.Отключиться();
КонецПроцедуры
По собственному опыту могу сказать, что при отправке электронных сообщений с использованием внешней компоненты ROM-Mail электронные почтовые сообщения уходят мгновенно и, если требуется, абсолютно незаметно для пользователя.
По материалам сайта love1c 372