Почта в 1СВ хозяйственной деятельности многих предприятий часто возникает необходимость отправки и приёма сообщений по электронной почте в программе "1С:Предприятие". Как правило, чаще всего выполняется отправка почтовых сообщений из программы. Сообщения могут отправляться по разным поводам. Например, нужно отправить электронное письмо клиенту или поставщику. Или необходимо автоматизировать процесс формирования счёта-фактуры в формате PDF с последующей отправкой созданного файла по электронной почте. Или, с целью соблюдения безопасности и предотвращения ошибок, будет полезным посылать электронные извещения начальнику отдела продаж о том, скажем, что один из менеджеров дал клиенту скидку больше установленной величины. Поводов для отправки почтовых сообщений по электронной почте, на самом деле, может быть много и разных. Предлагаю рассмотреть несколько внешних компонент, с помощью которых можно работать с электронной почтой в программе "1С:Предприятие". Для того, чтобы удовлетворить потребности пользователей программы "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 не использует 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"); Иначе Сообщить("Не удалось отправить сообщение","!"); КонецЕсли; //отключение Почта.Отключиться(); КонецПроцедуры //процедура выполняет получение файла автообмена Процедура Почта_Получить(База) //настройка П=СоздатьОбъект("AddIn.AddInMail"); П.СерверПриема=СокрЛП(База.СерверПриема); П.ПортПриема=СокрЛП(База.ПортПриема); П.Логин=СокрЛП(База.ПочтаЛогин); П.Пароль=СокрЛП(База.ПочтаПароль); П.ОставлятьНаСервере=1; П.ПоказыватьПредупреждения=0; П.КаталогВложений=СокрЛП(База.Импорт)+"\"; //подключение Если П.Подключиться("Прием")=0 Тогда Сообщить("Не удалось подключиться к почтовому серверу для получения почты","!"); Возврат; КонецЕсли; //фильтр Фильтр=ВРег(СокрЛП(База.Удаленная)+"-"+СокрЛП(База.Текущая)); //сообщения Для й=1 По П.КоличествоСообщений() Цикл Если П.ПолучитьЗаголовок(й)=1 Тогда Если ВРег(П.Тема)=Фильтр Тогда Если П.ПолучитьТело(й)=1 Тогда //пометка на удаление П.ПометитьНаУдаление(й); //файлы Для ф=1 По П.КоличествоФайлов() Цикл Файл=П.КаталогВложений+П.ПолучитьФайл(ф); Сообщить("Получен файл: "+Файл); //сохранение П.СохранитьФайл(ф,); КонецЦикла; Иначе Сообщить("Не удалось получить тело сообщения "+й,"!"); КонецЕсли; КонецЕсли; Иначе Сообщить("Не удалось получить заголовок сообщения "+й,"!"); КонецЕсли; КонецЦикла; //отключение П.Отключиться(); КонецПроцедуры //процедура выполняет отправку файла автообмена Процедура Почта_Отправить(База) //настройка П=СоздатьОбъект("AddIn.AddInMail"); П.СерверОтправки=СокрЛП(База.СерверОтправки); П.ПортОтправки=СокрЛП(База.ПортОтправки); П.Логин=СокрЛП(База.ПочтаЛогин); П.Пароль=СокрЛП(База.ПочтаПароль); П.АутентификацияПриОтправке=База.Аутентификация; //подключение Если П.Подключиться("Отправка")=0 Тогда Сообщить("Не удалось подключиться к почтовому серверу для отправки почты","!"); Возврат; КонецЕсли; //создание П.АдресПолучателя=СокрЛП(База.АдресПолучателя); П.Тема=ВРег(СокрЛП(База.Текущая)+"-"+СокрЛП(База.Удаленная)); П.Тело=" |Отправитель: "+СокрЛП(База.Текущая)+" "+База.Наименование+" |Получатель: "+СокрЛП(База.Удаленная); //вложения Каталог=СокрЛП(База.Экспорт)+"\"; Файл=ФС.НайтиПервыйФайл(Каталог+"*.*"); Пока ПустаяСтрока(Файл)=0 Цикл //добавление Если Лев(Файл,1)<>"." Тогда Сообщить("Вложен файл: "+Каталог+Файл); П.Вложения=П.Вложения+Каталог+Файл+";"; КонецЕсли; //следующий Файл=ФС.НайтиСледующийФайл(); КонецЦикла; //отправка Если ПустаяСтрока(П.Вложения)=0 Тогда Если П.Отправить()=0 Тогда Сообщить("Не удалось отправить почту","!"); КонецЕсли; КонецЕсли; //отключение П.Отключиться(); КонецПроцедуры По собственному опыту могу сказать, что при отправке электронных сообщений с использованием внешней компоненты ROM-Mail электронные почтовые сообщения уходят мгновенно и, если требуется, абсолютно незаметно для пользователя. РезюмеВ статье описаны методы работы с электронной почтой в программе "1С:Предприятие 7.7". Читателям предложен краткий обзор нескольких внешних компонент, позволяющих работать с электронной почтой, а также приведены примеры программного кода. - Совет:
- Скачать внешние компоненты, а также файлы синтаксис-помощника с описанием методов настройки внешних компонент можно здесь.
- Дополнительная информация по теме программирования в 1С:
-
- Смотрите также:
- Обработки для 1С
- Скачать программы для 1С
- Учёт исходящей почты
- Как заработать в интернете
|