gifts2017

Отправка e-mail через Microsoft Office Outlook

Опубликовал Руслан (ruslanruslan) в раздел Программирование - Практика программирования

Способ обхода повышенной безопасности Microsoft Office Outlook, для программного доступа к функциям работы с почтой. Используется библиотека Outlook Redemption.

Сама библиотека Outlook Redemption реализована в виде COM DLL. Разработчик Dmitry Streblechenko.

Смысл использования библиотеки состоит в том, что начиная с версии Outlook 2000 и по сей день Microsoft использует режим повышенной безопасности для доступа к Outlook через СDO. В результате программная работа с Outlook либо вообще блокируется, либо каждый раз выдаются предупреждающие сообщения, надоедающие пользователям. Библиотека Redemption позволяет обойти повышенную безопасность и спокойно работать с Microsoft Office Outlook.

Пример кода, для полуавтоматической отправки заказа поставщику из Управления Торговлей. Заказ сохраняется в XLS, присоединяется к письму, и письмо, готовое для отправки, отображается на экране. Далее в новом сообщении Outlook, пользователь может дописать что-нибудь и нажать кнопку Отправить.

функция ПослатьВложениеXLS(ПосылатьОтчет=ложь) экспорт
    Если ПосылатьОтчет тогда
        Отчет=Элементыформы.ПолеТабличногоДокумента;
    иначе
        Отчет=ПечатныйДокумент;
    конецесли;
    ФайлВФорматеXLS = "c:\temp\Заказ.xls"; //ПолучитьИмяВременногоФайла();
    Отчет.Записать(ФайлВФорматеXLS, ТипФайлаТабличногоДокумента.XLS);
    
    myOlApp = Новый COMОбъект("Outlook.Application");
    myItem = myOlApp.CreateItem(0); 
    //Redemption
    SafeItem = Новый COMОбъект("Redemption.SafeMailItem");
    SafeItem.Item = myItem;

    //Адрес
    Если Поставщик<>неопределено тогда
        Запрос=Новый запрос;
        Запрос.Текст="ВЫБРАТЬ КонтактнаяИнформация.Представление 
        | ИЗ 
        | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация 
        | ГДЕ 
        | КонтактнаяИнформация.Вид.Наименование =""Адрес электронной почты контрагента для обмена электронными документами"" 
        | И КонтактнаяИнформация.Объект = &Парам1";
        Запрос.УстановитьПараметр("Парам1",Поставщик);
        выборка=Запрос.Выполнить().Выбрать();
        выборка.следующий();
        адреспочты=выборка.Представление;
        если СокрЛП(адреспочты)<>"" тогда
            myRecipient = SafeItem.Recipients.Add(адреспочты);
        конецесли;
    конецесли;    
    SafeItem.Subject = Отчет.Область(3,2).Текст;
    myItem.BodyFormat=1;
    myItem.Body ="Добрый день.
    |
    |Заказ во вложении. Прошу выставить счет.
    |
    |С уважением,
    |Иванов Иван
    |
    |ООО «Иван»
    |+7 (111) 123-45-67";
    xlAplication = Новый COMОбъект("Excel.Application");    
    xlDoc=xlAplication.Workbooks.Open(ФайлВФорматеXLS);
    xlPS=xlDoc.Worksheets(1).PageSetup;
    xlPS.Zoom=False;
    xlPS.FitToPagesWide=1;
    xlDoc.Save();
    xlAplication.quit();
    myAttachments = myItem.Attachments();
    myAttachments.Add( ФайлВФорматеXLS, 1, 1, "Заказ поставщику");
    SafeItem.Display();
    УдалитьФайлы(ФайлВФорматеXLS);
конецфункции

У библиотеки Redemption есть один важный нюанс. Если вы используете 1С:Предприятие на платформе x64, то и Microsoft Office и библиотека Redemption должны использоваться только 32х-разрядные! То есть офис надо ставить x86. Дело в том, что сама клиентская платформа 1С не имеет версии x64, а достучаться из 32-х разрядной 1С в офис x64 не получается.

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа