Отправляет email-рассылки с помощью сервиса Sendsay

Я люблю 1С

  Все выпуски  

Я люблю 1С Почта


Love1C Новостная рассылка сайта "Я люблю 1С"

Почта в 1С

В хозяйственной деятельности многих предприятий часто возникает необходимость отправки и приёма сообщений по электронной почте в программе "1С:Предприятие". Как правило, чаще всего выполняется отправка почтовых сообщений из программы.

Сообщения могут отправляться по разным поводам. Например, нужно отправить электронное письмо клиенту или поставщику. Или необходимо автоматизировать процесс формирования счёта-фактуры в формате PDF с последующей отправкой созданного файла по электронной почте. Или, с целью соблюдения безопасности и предотвращения ошибок, будет полезным посылать электронные извещения начальнику отдела продаж о том, скажем, что один из менеджеров дал клиенту скидку больше установленной величины. Поводов для отправки почтовых сообщений по электронной почте, на самом деле, может быть много и разных.

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

    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");
         Иначе
              Сообщить("Не удалось отправить сообщение","!");
         КонецЕсли;
         //отключение
         Почта.Отключиться();
    КонецПроцедуры

    //процедура выполняет получение файла автообмена
    Процедура Почта_Получить(База)
         //настройка
         П=СоздатьОбъект("AddIn.AddInMail");
         П.СерверПриема=СокрЛП(База.СерверПриема);
         П.ПортПриема=СокрЛП(База.ПортПриема);
         П.Логин=СокрЛП(База.ПочтаЛогин);
         П.Пароль=СокрЛП(База.ПочтаПароль);
         П.ОставлятьНаСервере=1;
         П.ПоказыватьПредупреждения=0;
         П.КаталогВложений=СокрЛП(База.Импорт)+"\";
         //подключение
         Если П.Подключиться("Прием")=0 Тогда
              Сообщить("Не удалось подключиться к почтовому серверу для получения почты","!");
              Возврат;
         КонецЕсли;
         //фильтр
         Фильтр=ВРег(СокрЛП(База.Удаленная)+"-"+СокрЛП(База.Текущая));
         //сообщения
         Для й=1 По П.КоличествоСообщений() Цикл
              Если П.ПолучитьЗаголовок(й)=1 Тогда
                   Если ВРег(П.Тема)=Фильтр Тогда
                        Если П.ПолучитьТело(й)=1 Тогда
                             //пометка на удаление
                             П.ПометитьНаУдаление(й);
                             //файлы
                             Для ф=1 По П.КоличествоФайлов() Цикл
                                  Файл=П.КаталогВложений+П.ПолучитьФайл(ф);
                                  Сообщить("Получен файл: "+Файл);
                                  //сохранение
                                  П.СохранитьФайл(ф,);
                             КонецЦикла;
                        Иначе
                             Сообщить("Не удалось получить тело сообщения "+й,"!");
                        КонецЕсли;
                   КонецЕсли;
              Иначе
                   Сообщить("Не удалось получить заголовок сообщения "+й,"!");
              КонецЕсли;
         КонецЦикла;
         //отключение
         П.Отключиться();
    КонецПроцедуры

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

    По собственному опыту могу сказать, что при отправке электронных сообщений с использованием внешней компоненты ROM-Mail электронные почтовые сообщения уходят мгновенно и, если требуется, абсолютно незаметно для пользователя.

    Резюме

    В статье описаны методы работы с электронной почтой в программе "1С:Предприятие 7.7". Читателям предложен краткий обзор нескольких внешних компонент, позволяющих работать с электронной почтой, а также приведены примеры программного кода.

    Совет:
    Скачать внешние компоненты, а также файлы синтаксис-помощника с описанием методов настройки внешних компонент можно здесь.
    Сайт рассылки Страница рассылки Архив рассылки Подписаться

    В избранное