Имя: Пароль:
1C
1С v8
8.3, программно отправить e-mail
,
0 YDen
 
11.10.24
16:19
Здравствуйте.
Поиском пользовался, но там объяснение как из готовых конфигураций послать средствами 1с печатную форму в xls формате.
Плиз, кто делал, подскажите код. 8.3 версия, самописная конфигурация, простой документ с ТЧ, создана печатная форма. Нужно программно отправить e-mail с вложением печатной формы в формате xlsx.

Благодарю
1 big
 
11.10.24
16:22
воюшмать... 20 лет на форуме и не знать как мыло из снеговика отправить... ((((  рукалицо...
2 Волшебник
 
11.10.24
16:27
Процедура ПослатьПисьмо(Получатели, ПутьФайла)
	ОтправительСистема1С = Справочники.УчетныеЗаписиЭлектроннойПочты.Системная;
		
	интернетПочта = Новый ИнтернетПочта;
	ПодключитьсяКСерверуЭлектроннойПочты(интернетПочта, ОтправительСистема1С);
		
	письмо = Новый ИнтернетПочтовоеСообщение;
	письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
	письмо.Тема = ТемаПисьма;
		
	Для Каждого получатель ИЗ Получатели Цикл
		получательПисьма = письмо.Получатели.Добавить();
		получательПисьма.Адрес 		 = получатель.Адрес; 
		получательПисьма.ОтображаемоеИмя = получатель.Пользователь.Наименование; 
	КонецЦикла;
		
	письмо.Отправитель 	= ОтправительСистема1С.АдресЭлектроннойПочты;
	письмо.ИмяОтправителя 	= "Система 1С";
		
	письмо.Вложения.Добавить(ПутьФайла, "НазваниеВложения");
		
	интернетПочта.Послать(письмо);
		
	ОтключитьсяОтСервераЭлектроннойПочты(интернетПочта);
КонецПроцедуры

//==============================================================================
Процедура ПодключитьсяКСерверуЭлектроннойПочты(пИнтернетПочта, пУчетнаяЗапись)
	почтовыйПрофиль = УправлениеЭлектроннойПочтой.ПолучитьИнтернетПочтовыйПрофиль(пУчетнаяЗапись);
	Попытка
		пИнтернетПочта.Подключиться(почтовыйПрофиль);
	Исключение
		инфоОбОшибке = ИнформацияОбОшибке();
		ЗаписьЖурналаРегистрации(
			"ОтправкаОповещений.ПодключитьсяКСерверуЭлектроннойПочты",
			УровеньЖурналаРегистрации.Ошибка,
			, ,
			ПодробноеПредставлениеОшибки(инфоОбОшибке) + Символы.ПС + __.JSON(почтовыйПрофиль));
		ВызватьИсключение "Не удалось подключиться к серверу электронной почты для отправки сообщения.
			|" + КраткоеПредставлениеОшибки(инфоОбОшибке);
	КонецПопытки;
КонецПроцедуры

//==============================================================================
Процедура ОтключитьсяОтСервераЭлектроннойПочты(пИнтернетПочта)
	Попытка
		пИнтернетПочта.Отключиться();
	Исключение
		инфоОбОшибке = ИнформацияОбОшибке();
		ЗаписьЖурналаРегистрации(
			"ОтправкаОповещений.ОтключитьсяОтСервераЭлектроннойПочты",
			УровеньЖурналаРегистрации.Ошибка,
			, ,
			ПодробноеПредставлениеОшибки(инфоОбОшибке));
		ВызватьИсключение "Не удалось отключиться от сервера электронной почты.
			|" + КраткоеПредставлениеОшибки(инфоОбОшибке);
	КонецПопытки;
КонецПроцедуры
3 YDen
 
11.10.24
16:31
(2) Благодарю, но чуть не то. Это выдернуто из контекста. У меня с нуля конфигурация.
Именно документ с ТЧ, его печатная форма по e-mail в xlsx.
4 yurikmellon2
 
11.10.24
16:34
(0)         Профиль = Новый ИнтернетПочтовыйПрофиль;
        //Профиль.АдресСервераPOP3      = "mail.po4ta.ru";
        Профиль.Пользователь          = "user";
        Профиль.Пароль                  = "password";
        Профиль.АутентификацияSMTP   = СпособSMTPАутентификации.Login;
        Профиль.АдресСервераSMTP      = "mail.po4ta.ru";
        Профиль.ПарольSMTP                  = "password";
        Профиль.ПользовательSMTP     = "user";
        Профиль.ПортSMTP             = 587;
        
        Почта = Новый ИнтернетПочта;
        Попытка
            Почта.Подключиться(Профиль);
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
        Сообщение = Новый ИнтернетПочтовоеСообщение;
        Сообщение.Отправитель = "[email protected]";
        Сообщение.ИмяОтправителя = "Отправитель";
    

        Сообщение.Получатели.Добавить("[email protected]");
        
        Сообщение.Тема = "Тема сообщения";
        Сообщение.Тексты.Добавить(СтрокаДляОтправки,ТипТекстаПочтовогоСообщения.HTML);
        Сообщение.ОбработатьТексты();
        //        
        Попытка
            Почта.Послать(Сообщение);
        Исключение
            Сообщить(ОписаниеОшибки());
            Почта.Отключиться();
        КонецПопытки;
        
        Почта.Отключиться();
5 YDen
 
11.10.24
16:37
Коллеги, а с сохранением в xlsx и его последующей отправкой по e-mail нет кода?
Конфигурация - не коммерческий продукт, чисто на энтузиазме.

благодарю
6 Волшебник
 
11.10.24
16:43
(5) Вы сами что-то будете делать или всю работу хотите переложить на форум?
7 YDen
 
11.10.24
16:46
(6) Почему же, делаю. Не могу сообразить, как в Обработкупроведения запихать это:
Процедура СформироватьДокумент(Макет)

   ТабДок = Новый ТабличныйДокумент;
   ШапкаОбласть = Макет.ПолучитьОбласть("Шапка");
   ТабДок.Вывести(ШапкаОбласть);
   ПотокВПамяти = Новый ПотокВПамяти();
   ТабДок.Записать(ПотокВПамяти, ТипФайлаТабличногоДокумента.XLSX);
   ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
   Тема = "Тема от: "+Строка(Формат(ТекущаяДата()-86400, "ДФ=dd.MM.yyyy"));
   ТекстПисьма = "";

   ОтправитьПисьмоПоЭлектроннойПочте("Адрес отправки", ,Тема, ТекстПисьма, ДвоичныеДанные, "Имя отправителя");

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

&НаСервере
Процедура ОтправитьПисьмоПоЭлектроннойПочте(АдресПочты, Копия = Неопределено, Тема, ТекстПисьма, Вложение = Неопределено, ИмяОтправителя)

   ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
   ПочтовыйПрофиль.ВремяОжидания          = 300;// Google рекомендует 5 минут
   // Исходящая почта
   //Если ФормироватьIMAPПрофиль Тогда
   ПочтовыйПрофиль.АдресСервераIMAP   = "imap.yandex.ru";   // imap.mail.ru
   ПочтовыйПрофиль.ПользовательIMAP   = "[email protected]"; // [email protected]
   ПочтовыйПрофиль.ПортIMAP           = 993; // 993
   Попытка
       ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
   Исключение
       Сообщить("Не работает служба SSL IMAP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
   КонецПопытки;
   ПочтовыйПрофиль.ПарольIMAP         = "123";
   //КонецЕсли;

   //Если ФормироватьSMTPПрофиль Тогда
   ПочтовыйПрофиль.АдресСервераSMTP   = "smtp.yandex.ru"; // smtp.mail.ru
   ПочтовыйПрофиль.ПользовательSMTP   = "[email protected]"; // [email protected]
   ПочтовыйПрофиль.ПортSMTP           = 465; // 465
   Попытка
       ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
   Исключение
       Сообщить("Не работает служба SSL SMTP! Для корректной работы необходима платформа 1С версии не менее 8.3!");
   КонецПопытки;
   ПочтовыйПрофиль.ПарольSMTP         = "123";
   ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
   //КонецЕсли;

   // Входящая почта
   //Если ФормироватьPOP3Профиль Тогда
   ПочтовыйПрофиль.АдресСервераPOP3   = "pop.yandex.ru"; //    pop.mail.ru
   ПочтовыйПрофиль.Пользователь       = "[email protected]"; // [email protected]
   ПочтовыйПрофиль.ПортPOP3           = 993; // 995
   Попытка
       ПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;
   Исключение
       Сообщить("Не работает служба SSL POP3! Для корректной работы необходима платформа 1С версии не менее 8.3!");
   КонецПопытки;
   ПочтовыйПрофиль.Пароль             = "123";
   //Если НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда
   //  ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.APOP;
   //ИначеЕсли НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда
   //  ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.CramMD5;
   //Иначе
   //  ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;
   //КонецЕсли;
   //КонецЕсли;


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

   Если Вложение <> Неопределено Тогда
       Тема = Тема+".xlsx";
       ПочтовоеСообщение.Вложения.Добавить(Вложение,Тема);
   КонецЕсли;

   Email = Новый ИнтернетПочта;
   Попытка
       Email.Подключиться(ПочтовыйПрофиль);
       Email.Послать(ПочтовоеСообщение);
       // Сообщить("Отправлено письмо на e-mail:"+СокрЛП(ТекПолучатель));
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;

   Email.Отключиться();

КонецПроцедуры
8 Волшебник
 
11.10.24
16:45
(7) При проведении нельзя взаимодействовать с почтовым сервером (крайне не рекомендуется).
9 Lama12
 
11.10.24
16:58
(7) Жесть. 🤦‍♂️
Ставь задание в очередь. Потом очередь разбирай и отправляй письма. Проведение должно быть стремительным и быстрым. Нафига там отправка почты?
10 fly7
 
11.10.24
23:13
(9) а если в конце проведения пульнуть отправку в фоновое задание?
11 craxx
 
12.10.24
06:56
(7) Мдя... 20 лет стажа на форуме...
Просто слов нету..
12 osa1C
 
12.10.24
07:39
(11) Судя по темам человек 20 лет с клюшками работал. Так что не стоит осуждать
13 Злоп
 
12.10.24
12:38
(12) В клюшках те же советы что выше и здесь по 8-ке.
костылестроителей везде хватает.
.
Автор, что будет в проведении при повторном проведении?
14 Fram
 
12.10.24
15:58
(13) это будет его следующая тема здесь
AdBlock убивает бесплатный контент. 1Сергей