Отправка почты с использованием основного почтового клиента ОС

21.09.11

Разработка - Универсальные функции

В публикации описан фрагмент кода, позволяющий отправлять печатные формы с помощью почтового клиента операционной системы (напр. Outlook, Bat и т.д.)

В Управлении торговлей 10.3 в печатных формах документов есть кнопка "отправить по электронной почте", правда ей можно воспользоваться,  если в настройках учета установлена галка "использовать встроенный почтовый клиент". Т.к. встроенный почтовый клиент часто не используют, этот удобный механизм не задействуется. Поэтому для отправки печатной формы накладной необходимо ее сначала сохранить на диск, затем вложить в письмо внешнего почтового клиента.

 Ниже описаны изменения в конфигурации, которые необходимо внести, для автоматического создания письма во внешнем почтовом клиенте по  кнопке "отправить по электронной почте ". Тестировалось для 8.1 УТ 10.3.

  1. Для начала в конфигураторе, если не включена возможность изменений, ее необходимо включить (конфигурация - поддержка- настройка поддержки)

  2. Добавить общий модуль "_управлениеПочтой" (см. рис2), в него скопировать процедуры: "ОтправитьПечатнуюФормуВнешнимТранспортом" и "КорректировкаНаименования" (ниже приведены см. п. 4).

  3. В общем модуле "УправлениеОтчетами" отредактировать процедуру "ОтправитьДокументПоЭлектроннойПочте", закомментировав сообщение и добавив вызов нашей процедуры "ОтправитьПечатнуюФормуВнешнимТранспортом". Редактируемый фрагмент этой процедуры:

	 Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
    //ОбщегоНазначения.СообщитьОбОшибке("Отправлять документы по электронной почте можно только из встроенного почтового клиента.
    // |В настоящее время в настройках параметров учета установлено использование основного почтового клиента операционной системы.");
    //Предупреждение("Операция не выполнена");
    _управлениеПочтой.ОтправитьПечатнуюФормуВнешнимТранспортом (Документ, УправлениеПользователями.ПолучитьЗначениеПоУмолчанию     (ПараметрыСеанса.ТекущийПользователь,"ОсновнойКаталогФайлов"),ИмяФайлаВложения); // изменения программиста начало
    Возврат;
КонецЕсли;

     4. Текст модуля  _управлениеПочтой:
 
Процедура ОтправитьПечатнуюФормуВнешнимТранспортом (ПолеТабличногоДокумента, КаталогФормирования="",имяФайлаВложения) Экспорт

    Расширение="xls";

    Файл = Новый Файл(КаталогФормирования);
    Если Файл.Существует() Тогда
        ИмяФайла = КаталогФормирования;
    Иначе
        ИмяФайла = КаталогВременныхФайлов();
    КонецЕсли;

    Если Не ПустаяСтрока(ИмяФайла) Тогда
        Если Не Прав(ИмяФайла, 1) = "\" Тогда
            ИмяФайла = ИмяФайла + "\";
        КонецЕсли;
    КонецЕсли;

    ОтносительноеИмя =КорректировкаНаименования(имяФайлаВложения, ложь);
    ИмяФайлаБезРасширения = ИмяФайла + ОтносительноеИмя;

    ИмяФайла = ИмяФайлаБезРасширения + ".xls";
    ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);

    Почта=Новый Почта;
    Почта.Подключиться();
    Сообщ=Новый ПочтовоеСообщение;
    Сообщ.Тема=имяФайлаВложения;
    Сообщ.Текст="";
    ВыбФайл=Новый Файл(ИмяФайла);
    Если ВыбФайл.Существует() Тогда
        Данные=Новый ДвоичныеДанные(ИмяФайла);
        Сообщ.Вложения.Добавить(Данные,ВыбФайл.Имя);
    КонецЕсли;
    //УчетнаяЗапись=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь,"ОсновнаяУчетнаяЗапись");
    //Сообщ.Получатели.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты);
    Почта.Послать(Сообщ,);
    Почта.Отключиться();

    Попытка
        УдалитьФайлы(ИмяФайла);
        //Сообщить("Удален файл "+ИмяФайла);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры


Функция КорректировкаНаименования(Знач ИсходнаяСтрока, Выводитьсообщения=Истина)

    Наименование=СокрЛП(ИсходнаяСтрока);
    ДлиннаНаим=СтрДлина(Наименование);
    СписокЗаменяемыхимволов=новый СписокЗначений;

    Если ДлиннаНаим=0 Тогда
        Сообщение="Не заполнена проверяемая строка!";
        #Если Клиент Тогда
            Если Выводитьсообщения Тогда
                Сообщить(Сообщение);
            КонецЕсли;
        #КонецЕсли
    КонецЕсли;

    Для i=0 По ДлиннаНаим-1 Цикл  
        Стр=Прав(Наименование,ДлиннаНаим-i);  
        // руск. алф. 192- 255 англ. алф. мал. 65-90 англ. алф. бол. 97-122 пробел=32 цифры АSCI дес.
        Если (((КодСимвола(Стр)>1039) И (КодСимвола(Стр)<1106)) ИЛИ ((КодСимвола(Стр)>64) И (КодСимвола(Стр)<94)) ИЛИ ((КодСимвола(Стр)>96) И (КодСимвола(Стр)<123)) ИЛИ ((КодСимвола(Стр)>47) И (КодСимвола(Стр)<58)) И (КодСимвола(Стр)<>32)) Тогда
        Иначе
            СписокЗаменяемыхимволов.Добавить(Лев(Стр,1));
        КонецЕсли;
    КонецЦикла;

  Для каждого ЭлементСписка Из СписокЗаменяемыхимволов Цикл
      Если ЭлементСписка.Значение=" " Тогда
          Наименование=СтрЗаменить(Наименование,ЭлементСписка.Значение,"_");
          Сообщение="В наименование колонки "+ИсходнаяСтрока+" встречается недопустимый символ (пробел) "+ЭлементСписка.Значение+", он будет заменен на '_'";
          #Если Клиент Тогда
              Если Выводитьсообщения Тогда
                  Сообщить(Сообщение);
              КонецЕсли;
          #КонецЕсли
      Иначе
          Наименование=СтрЗаменить(Наименование,ЭлементСписка.Значение,"");
          Сообщение="В наименование колонки "+ИсходнаяСтрока+" встречается недопустимый символ "+ЭлементСписка.Значение+", он будет удален";
          #Если Клиент Тогда
              Если Выводитьсообщения Тогда
                  Сообщить(Сообщение);
              КонецЕсли;
          #КонецЕсли  
        КонецЕсли
    КонецЦикла;
    Возврат Наименование;
КонецФункции

См. также

"Акты сверки +" Групповая подготовка и рассылка актов сверки для Бухгалтерии 3.0.

Взаиморасчеты Email рассылки Акт сверки Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Внешняя обработка для Бухгалтерии 3.0 - позволяет автоматически формировать документы «Акт сверки расчетов» с контрагентами за выбранный период с последующей фоновой отправкой на почту контрагента.

3000 руб.

25.11.2020    22069    162    4    

148

Автоматическая рассылка отчетов из 1С: Управление торговлей 10.3 и 1С:УПП по электронной почте

Email рассылки Оптовая торговля Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием Управленческий учет Платные (руб)

Многим сотрудникам предприятия требуется актуальная и достоверная информация для принятия верных управленческих решений. Получить данную информацию можно при помощи отчетов, существующих в конфигурации «1С: Управление торговлей 10.3» или «1С:УПП». Но не всегда у пользователей есть время, возможность и/или желание формировать отчеты непосредственно в системе. Намного привычней и удобней получать готовые отчеты на электронную почту, не открывая 1С.

12000 руб.

16.04.2014    84238    100    91    

94

Email, SMS, Telegram рассылки из 1С - Директ Маркетинг

Управление взаимоотношениями с клиентами (CRM) Мессенджеры и боты SMS рассылки Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Полный набор инструментов для качественных транзакционных и маркетинговых Email, SMS, Telegram рассылок из 1С. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

7788 руб.

07.04.2014    83617    40    191    

127

Групповое создание актов сверок

Взаиморасчеты Email рассылки Акт сверки Платформа 1С v8.3 Бухгалтерский учет 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Обработки предназначены для массового создания актов сверки и отправки их по электронной почте для конфигураций Управление торговлей 10.3. и Бухгалтерия предприятия 3.0. Для Бухгалтерии 3.0 Разработка велась на 1С:Предприятие 8.3 (8.3.15.1830). проверялась на Бухгалтерия предприятия 3.0 (3.0.71.83) и 3.0.76.77 Для Управление торговлей 10.3 Разработка велась на 1С:Предприятие 8.3 релиз конфигурации (10.3.61.2) . РАБОТАЕТ НА БАЗОВЫХ и ПРОФ. ВЕРСИЯХ.

2000 руб.

24.04.2020    30339    117    66    

98

SALE! 15%

Массовая рассылка печатных форм любых документов по электронной почте

Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

За $m и Руб. Решение для массовой рассылки печатных форм (в том числе и дополнительных) любых документов, и произвольных файлов по электронной почте. Рассылка пакета документов. Добавление факсимильных печати и подписи. Произвольные шаблоны HTML/Simple text с автозаполнением любыми полями документа. Любые форматы файлов. Упаковка вложений в архив. Транслитерация имен файлов. Разбиение рассылки на произвольные порции. Обход спам-фильтров. Журналирование рассылок.

3600 3060 руб.

30.06.2022    8981    62    88    

25
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. Администратор 1С 41 22.09.11 05:08 Сейчас в теме
В публикации описан фрагмент кода, позволяющий отправлять печатные формы с помощью почтового клиента операционной системы (напр. Outlook, Bat и т.д.)

Перейти к публикации

1. Angeros 22.09.11 05:08 Сейчас в теме
Спс. Идея обязательно пригодиться.
2. sstar90 22.09.11 12:21 Сейчас в теме
Спасибо за идею, попробуем
3. CheBurator 3119 22.09.11 21:05 Сейчас в теме
как в снеговике это с извращениями сделано...
открой для себя
1. встроенный в винды штатный транспорт отправки писем CDO
.
на 7.7 в любой конфигурации для ЛЮБОГО отчета достаточно всего одной обработки
http://infostart.ru/public/14180/
http://infostart.ru/public/14131/
4. Администратор 1С 41 22.09.11 21:24 Сейчас в теме
(3) CheBurator,
О CDO знаю, твои обработки конечно хороши, но есть недостаток - письмо отправленное через CDO не сохранится в корпоративной почте в папке исходящие.
5. Администратор 1С 41 22.09.11 21:29 Сейчас в теме
(3) а этот момент иногда является принципиальным
6. Kazan 12.10.11 05:21 Сейчас в теме
Не проходит авторизацию пока ручками не откроешь клиент. win live mail 2011
7. plevako 12.10.11 14:48 Сейчас в теме
8. MYRZILKA123 2 21.10.11 16:25 Сейчас в теме
спасибо попробовал теперь пользуюсь.
9. Sanek_159 1 11.05.12 15:12 Сейчас в теме
Здравствуйте!
Конфигурация УПП 1.3.25
Когда делаю отправку из 1C появляется окно с сообщением: "С запрошенным действием не связана программа электронной почты.Установите программу электронной почты или,если она уже установлена,создайте связь в панели управления "Программы по умолчанию""
Если вхожу в Панель управления-Программы по умолчанию там всегда выбрана конфигурация Другая. Редактирую ее-выставляю Mozilla Thunderbird как почтовую программу по умолчанию, жму ОК. Перезахожу-все остается на своих местах. Если выбираю другую конфигурацию(Microsoft Windows или Не Microsoft) то все равно активной остается конфигурация Другая.
PS: пробовал с другого ПК где установлен outlook 2010, ничего не происходит и ошибка не вываливается. Подскажите, пожалуйста, что может быть не так?
10. Администратор 1С 41 12.05.12 19:01 Сейчас в теме
Я не силен в настройках ОС, а я так понимаю дело именно в них. Код рабочий. У вас работает пункт меню Windows "отправить->адресат", вызываемый по щелчку правой кнопки мыши на любом файле?
Вот что яндекс говорит, может поможет: "http://forum.windowsfaq.ru/showthread.php?t=91294"
11. haous 2 03.10.12 16:19 Сейчас в теме
А для УТП для Украины 8.2 подойдет?
12. Администратор 1С 41 05.10.12 16:48 Сейчас в теме
Попробуйте,
скорее всего да
13. BlackStar 19.12.12 17:00 Сейчас в теме
А с MS Outlook работает у кого нибудь? У меня при нажатии на отправку на секунду часы появляются, и больше ничего, почтовый клиент не открывается. При этом пункт меню Windows "отправить->адресат" работает нормально
16. Sanek_159 1 29.08.13 11:00 Сейчас в теме
(13) BlackStar, Тоже не открывается (Outlook 2010), часы на секунду и все. Удалось решить кому проблему?
При использовании программы по умолчанию Mozilla Thunderbird открывается только программа, но не создается новое письмо, в чем может быть проблема?
14. isn 15 22.05.13 10:04 Сейчас в теме
Здравствуйте!
Вы можете в пункте 3 опубликовать всю процедуру которая в итоге должна появится?
15. Администратор 1С 41 22.05.13 19:04 Сейчас в теме
(14) isn,

В моем релизе (10.3.10.14) она с учетом моих правок выглядит так:

Процедура ОтправитьДокументПоЭлектроннойПочте(Документ, ИмяФайлаВложения = "") Экспорт

Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
//ОбщегоНазначения.СообщитьОбОшибке("Отправлять документы по электронной почте можно только из встроенного почтового клиента.
// |В настоящее время в настройках параметров учета установлено использование основного почтового клиента операционной системы.");
//Предупреждение("Операция не выполнена");
_управлениеПочтой.ОтправитьПечатнуюФормуВнешнимТранспортом (Документ, УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь,"ОсновнойКаталогФайлов"),ИмяФайлаВложения); //изменения программиста
Возврат;
КонецЕсли;

ФормаОтправкиДокумента = ПолучитьОбщуюФорму("НастройкаОтправкиОтчета");
ФормаОтправкиДокумента.Отчет = Документ;
ФормаОтправкиДокумента.ИмяФайлаВложения = СтрЗаменить(ИмяФайлаВложения, ".", " ");
ФормаОтправкиДокумента.ТемаСообщения = ИмяФайлаВложения;
ФормаОтправкиДокумента.ОткрытьМодально();

КонецПроцедуры
17. AHuk 04.09.13 18:22 Сейчас в теме
Спасибо огромное. Но есть вопрос, как передать тему и текст и получателя - это ясно, но можно ли передать текст в HTML коде? и у меня вложения в виде "v8_C56_7a.tmp" формируется, в чём может быть проблема?
Прикрепленные файлы:
19. Программулькин 301 23.03.17 13:38 Сейчас в теме
Сначала хотел плюсануть, НО затем решил попробовать. Захотелось поставить минус, ибо не заработало, НО минусовать не буду. Насколько я понял, смысл статьи показать на примере использования функции глобального контекста: Почта (Mail)
Методы:
Выбрать (Get)
Отключиться (Logoff)
Подключиться (Logon)
Послать (Send)
Конструкторы:
По умолчанию
Описание:
Предназначен для доступа к почтовой системе, установленной на компьютере. Используется технология MAPI.
Доступность:
Тонкий клиент, толстый клиент.
Пример:
Почта = Новый Почта;


Как показывает практика не всегда работает.


Лучше использовать код ниже, НО естественно переделать по своим примочкам и условиям, ибо он вообще не универсальный. А вот сделать симбиоз этих 2х методов, тогда может что то и получиться хорошее.

ИмяФайла = "файл.XLS";
	
	// Попытка инициализации Outlook
	Попытка
		Outlook = Новый COMОбъект("Outlook.Application");
	Исключение
		Предупреждение("Не получилось создать объект Outlook.Application!");
		Возврат;
	КонецПопытки;
	
	// Попытка сохранения отчета
	Попытка
		ЭлементыФормы.ПолеТабДок.Записать(КаталогВременныхФайлов() + ИмяФайла, ТипФайлаТабличногоДокумента.XLS);
	Исключение
		Предупреждение("Не удалось создать файл " + ИмяФайла + "!");
		Возврат;
	КонецПопытки;
	
	// Заполнение реквизитов письма
	Письмо = Outlook.CreateItem(0);
	Письмо.Subject = "Какая то тема";                       // Тема
	Письмо.Body    = "Какойто текст"; // Текст письма
	//Письмо.to      = "";                // Адрес получателя
	Письмо.Attachments.Add(КаталогВременныхФайлов() + ИмяФайла); // Вложение
	
	// Попытка открытия подготовленного письма
	Попытка
		Письмо.Display();
	Исключение
	КонецПопытки;
Показать
Оставьте свое сообщение