Массовая Рассылка
Показывать по
сообщений
- 1
- 2
13.10.2017
14:04
#1
1с8.3, конфигурация самописная, дописываю обработку для массовой рассылки сообщений, письма отправляются корректным адресатам, но почему-то из процедуры формирования письма передается только тема, которая вылезает и вместо текста сообщения, вложение так же отсутствует, помогите пожалуйста найти косяки..
Процедура отправки:
Процедура ОтправитьНажатие()
КоличествоСтрок = ЭлементыФормы.ВыбДилеры.Значение.Количество();
Если КоличествоСтрок <> 0 тогда
Для каждого строкаТаблицы из ВыбДилеры цикл
ВыбФайл="";
КонецЦикла;
КонецЕсли;
Для каждого строкаТаблицы из ВыбФайлы цикл
Если Выбфайл=0 тогда
ВыбФайл=ВыбФайл+";";
Выбфайл=ВыбФайл+ВыбФайлы.Путь;
КонецЕсли;
КонецЦикла;
ТемаОтправки=ТемаПисьма;
ФайлТекстаСообщения=ТекстПисьма;
фс=ВыбФайл;
глОтправитьОтчетПоПочте(ФайлТекстаСообщения,ВыбДилер,ТемаОтправки,0,ВыбФайл,2);
КонецПроцедуры
Процедура почтового клиента:
Процедура глОтправитьПисьмоДиллерам(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт
//
// если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда
Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда
// ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls";
ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls";
// ТаблицаОтправки.Записать(ИмяФайла,1);
ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
//иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда
ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда
// поз=Найти(ТаблицаОтправки,";");
поз=СтрНайти(ТаблицаОтправки,";");
ИмяФайла=Новый Массив;//"";
пока поз<>0 цикл
тестфайла=Лев(ТаблицаОтправки,поз-1);
фс=Новый Файл(тестфайла);
// если фс.СуществуетФайл(тестфайла)=1 тогда
Если фс.Существует() тогда
// если Пустоезначение(ИмяФайла)=0 тогда
// ИмяФайла=ИмяФайла+";";
// конецесли;
// ИмяФайла=ИмяФайла+тестфайла;
ИмяФайла.Добавить(фс);
конецесли;
ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1);
поз=Найти(ТаблицаОтправки,";");
конеццикла;
//
фс=Новый Файл(ТаблицаОтправки);
// если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда
Если фс.Существует() тогда
//если Пустоезначение(ИмяФайла)=0 тогда
// ИмяФайла=ИмяФайла+";";
//конецесли;
//ИмяФайла=ИмяФайла+ТаблицаОтправки;
ИмяФайла.Добавить(фс);
конецесли;
иначе
ИмяФайла="";
конецесли;
//
АдресЭл=Константы.ЭлПочта.Получить();
Профиль=Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP=АдресЭл.Сервер;
Профиль.АдресСервераPOP3=АдресЭл.Сервер;
Профиль.Таймаут=60;
Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт));
Профиль.ПортPOP3=110;
Профиль.ПользовательSMTP=АдресЭл.Логин;
Профиль.ПарольSMTP=АдресЭл.Пароль;
Профиль.Пользователь=АдресЭл.Логин;
Профиль.Пароль=АдресЭл.Пароль;
Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login;
Сообщение=Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель=АдресЭл.АдресОтправителя;
Сообщение.ИмяОтправителя=АдресЭл.Отправитель;
Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта));
Сообщение.Тема=ТемаПисьма;
Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда
Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
ИначеЕсли лев(ТелоПисьма,5)="file:" тогда
// ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6)));
ТекстСообщения="";
ФайлТекстаСообщения=Новый ТекстовыйДокумент;
ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6)));
ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст();
Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML);
Иначе
Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
КонецЕсли;
Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда
ФайлСообщения=Новый Файл(ИмяФайла);
Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя);
ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда
Для каждого МЗнач из ИмяФайла Цикл
Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя);
КонецЦикла;
КонецЕсли;
Почта=Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Исключение
Сообщить("Ошибка отправки файла: "+ИмяФайла);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
//СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
Исключение
Сообщить(Получатель.ЭлПочта);
Сообщить(ОписаниеОшибки());
КонецПопытки;
УдалитьФайлы("file:G
Bases2\Balance.htm");
Сообщить(Получатель.Наименование);
Сообщить(ТемаПисьма);
Почта.Отключиться();
КонецПроцедуры
Процедура отправки:
Процедура ОтправитьНажатие()
КоличествоСтрок = ЭлементыФормы.ВыбДилеры.Значение.Количество();
Если КоличествоСтрок <> 0 тогда
Для каждого строкаТаблицы из ВыбДилеры цикл
ВыбФайл="";
КонецЦикла;
КонецЕсли;
Для каждого строкаТаблицы из ВыбФайлы цикл
Если Выбфайл=0 тогда
ВыбФайл=ВыбФайл+";";
Выбфайл=ВыбФайл+ВыбФайлы.Путь;
КонецЕсли;
КонецЦикла;
ТемаОтправки=ТемаПисьма;
ФайлТекстаСообщения=ТекстПисьма;
фс=ВыбФайл;
глОтправитьОтчетПоПочте(ФайлТекстаСообщения,ВыбДилер,ТемаОтправки,0,ВыбФайл,2);
КонецПроцедуры
Процедура почтового клиента:
Процедура глОтправитьПисьмоДиллерам(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт
//
// если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда
Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда
// ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls";
ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls";
// ТаблицаОтправки.Записать(ИмяФайла,1);
ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
//иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда
ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда
// поз=Найти(ТаблицаОтправки,";");
поз=СтрНайти(ТаблицаОтправки,";");
ИмяФайла=Новый Массив;//"";
пока поз<>0 цикл
тестфайла=Лев(ТаблицаОтправки,поз-1);
фс=Новый Файл(тестфайла);
// если фс.СуществуетФайл(тестфайла)=1 тогда
Если фс.Существует() тогда
// если Пустоезначение(ИмяФайла)=0 тогда
// ИмяФайла=ИмяФайла+";";
// конецесли;
// ИмяФайла=ИмяФайла+тестфайла;
ИмяФайла.Добавить(фс);
конецесли;
ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1);
поз=Найти(ТаблицаОтправки,";");
конеццикла;
//
фс=Новый Файл(ТаблицаОтправки);
// если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда
Если фс.Существует() тогда
//если Пустоезначение(ИмяФайла)=0 тогда
// ИмяФайла=ИмяФайла+";";
//конецесли;
//ИмяФайла=ИмяФайла+ТаблицаОтправки;
ИмяФайла.Добавить(фс);
конецесли;
иначе
ИмяФайла="";
конецесли;
//
АдресЭл=Константы.ЭлПочта.Получить();
Профиль=Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP=АдресЭл.Сервер;
Профиль.АдресСервераPOP3=АдресЭл.Сервер;
Профиль.Таймаут=60;
Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт));
Профиль.ПортPOP3=110;
Профиль.ПользовательSMTP=АдресЭл.Логин;
Профиль.ПарольSMTP=АдресЭл.Пароль;
Профиль.Пользователь=АдресЭл.Логин;
Профиль.Пароль=АдресЭл.Пароль;
Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login;
Сообщение=Новый ИнтернетПочтовоеСообщение;
Сообщение.Отправитель=АдресЭл.АдресОтправителя;
Сообщение.ИмяОтправителя=АдресЭл.Отправитель;
Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта));
Сообщение.Тема=ТемаПисьма;
Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда
Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
ИначеЕсли лев(ТелоПисьма,5)="file:" тогда
// ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6)));
ТекстСообщения="";
ФайлТекстаСообщения=Новый ТекстовыйДокумент;
ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6)));
ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст();
Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML);
Иначе
Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст);
КонецЕсли;
Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда
ФайлСообщения=Новый Файл(ИмяФайла);
Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя);
ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда
Для каждого МЗнач из ИмяФайла Цикл
Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя);
КонецЦикла;
КонецЕсли;
Почта=Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Исключение
Сообщить("Ошибка отправки файла: "+ИмяФайла);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
//СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP);
Исключение
Сообщить(Получатель.ЭлПочта);
Сообщить(ОписаниеОшибки());
КонецПопытки;
УдалитьФайлы("file:G

Сообщить(Получатель.Наименование);
Сообщить(ТемаПисьма);
Почта.Отключиться();
КонецПроцедуры
13.10.2017
15:25
#2
Может проще интегрировать "Работу с почтовыми сообщениями" из БСП чем самокат изобретать?
Ответили:
пост #3
13.10.2017
15:38
#3
Ответ на
пост №2
Денис (САМАРА), Ну как бы уже решение практически готово, обидно бросать его не оконченным.. 13.10.2017
17:00
#4
Цитата |
---|
Ну как бы уже решение практически готово |
13.10.2017
17:05
#5
Чем богаты тому рады....Процедуру глотправитьотчетпопочте не я писал, потому не могу вьехать что к чему, но она многофункцианальная, и под мои цели подходит.
Ответили:
пост #6
13.10.2017
18:50
#6
Ответ на
пост №5
Илья Привалов, судя по всему из 7.7 переносили. Ответили:
пост #7
16.10.2017
09:06
#7
Ответ на
пост №6
Prikum, Так и есть, вот рассылку осталось перенести. Ответили:
пост #8
16.10.2017
09:15
#8
Ответ на
пост №7
Илья Привалов, когда пишешь ответ, то в окне есть пиктограмма "<...>", если ее нажать и ввести туда свой код, то он будет выглядеть в более читаемом виде, а разбираться в той мешанине что выложил не очень охотно. Ответили:
пост #9
16.10.2017
09:53
#9
Ответ на
пост №8
Prikum, Я понял, спасибо, Вот код в виде читаемом) Проблем в обработке оказалось много, если выбрана группа целиком и из нее в таблицу отправки перенесены несколько человек пишет ошибку о неверном адресе элПочты, если же каждого выбрать по отдельности то письмо отправляется не каждому контрагенту из списка, а только одному, то количество раз, сколько строк в таблице..Код |
---|
Процедура ОтправитьНажатие() КоличествоСтрок = ЭлементыФормы.ВыбДилеры.Значение.Количество(); Если КоличествоСтрок <> 0 тогда Для каждого Строка из ВыбДилеры цикл ВыбФайл=ТекстПисьма; ТемаОтправки=ТемаПисьма; глОтправитьОтчетПоПочте(,ВыбДилер,ТемаОтправки,0,ВыбФайл,2); КонецЦикла; КонецЕсли; Для каждого строкаТаблицы из ВыбФайлы цикл Если Выбфайл=0 тогда ВыбФайл=ВыбФайл+";"; //Выбфайл=ВыбФайл+ВыбФайлы.Путь; КонецЕсли; КонецЦикла; КонецПроцедуры |
Это процедура общего модуля в которой уже к почте подключается и цепляет данные письма:
Код |
---|
Процедура глОтправитьОтчетПоПочте(ТаблицаОтправки,Получатель,ТемаПисьма,Сообщения=1,ТелоПисьма="",ТипПисьма=0) Экспорт // // если ТипЗначенияСтр(ТаблицаОтправки)="Таблица" Тогда Если ТипЗнч(ТаблицаОтправки)=Тип("ТабличныйДокумент") или ТипЗнч(ТаблицаОтправки)=Тип("ПолеТабличногоДокумента") тогда // ИмяФайла=КаталогПользователя()+"Отчет"+СтрЗаменить(СокрЛП(ТекущаяДата()),".","")+"_"+СтрЗаменить(СокрЛП(ТекущееВремя()),":","")+".xls"; ИмяФайла=КаталогВременныхФайлов()+"Отчет"+Формат(ТекущаяДата(),"ДФ=""ддммгггг'_'ЧЧммсс""")+".xls"; // ТаблицаОтправки.Записать(ИмяФайла,1); ТаблицаОтправки.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS); //иначеесли ТипЗначенияСтр(ТаблицаОтправки)="Строка" тогда ИначеЕсли ТипЗнч(ТаблицаОтправки)=Тип("Строка") тогда // поз=Найти(ТаблицаОтправки,";"); поз=СтрНайти(ТаблицаОтправки,";"); ИмяФайла=Новый Массив;//""; пока поз<>0 цикл тестфайла=Лев(ТаблицаОтправки,поз-1); фс=Новый Файл(тестфайла); // если фс.СуществуетФайл(тестфайла)=1 тогда Если фс.Существует() тогда // если Пустоезначение(ИмяФайла)=0 тогда // ИмяФайла=ИмяФайла+";"; // конецесли; // ИмяФайла=ИмяФайла+тестфайла; ИмяФайла.Добавить(фс); конецесли; ТаблицаОтправки=Сред(ТаблицаОтправки,поз+1); поз=Найти(ТаблицаОтправки,";"); конеццикла; // фс=Новый Файл(ТаблицаОтправки); // если фс.СуществуетФайл(ТаблицаОтправки)=1 тогда Если фс.Существует() тогда //если Пустоезначение(ИмяФайла)=0 тогда // ИмяФайла=ИмяФайла+";"; //конецесли; //ИмяФайла=ИмяФайла+ТаблицаОтправки; ИмяФайла.Добавить(фс); конецесли; иначе ИмяФайла=""; конецесли; // АдресЭл=Константы.ЭлПочта.Получить(); Профиль=Новый ИнтернетПочтовыйПрофиль; Профиль.АдресСервераSMTP=АдресЭл.Сервер; Профиль.АдресСервераPOP3=АдресЭл.Сервер; Профиль.Таймаут=60; Профиль.ПортSMTP=?(НЕ ЗначениеЗаполнено(АдресЭл.Порт),"25",Строка(АдресЭл.Порт)); Профиль.ПортPOP3=110; Профиль.ПользовательSMTP=АдресЭл.Логин; Профиль.ПарольSMTP=АдресЭл.Пароль; Профиль.Пользователь=АдресЭл.Логин; Профиль.Пароль=АдресЭл.Пароль; Профиль.АутентификацияSMTP=СпособSMTPАутентификации.Login; Сообщение=Новый ИнтернетПочтовоеСообщение; Сообщение.Отправитель=АдресЭл.АдресОтправителя; Сообщение.ИмяОтправителя=АдресЭл.Отправитель; Сообщение.Получатели.Добавить(СокрЛП(Получатель.ЭлПочта)); Сообщение.Тема=ТемаПисьма; Если НЕ ЗначениеЗаполнено(ТелоПисьма) тогда Сообщение.Тексты.Добавить(ТемаПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст); ИначеЕсли лев(ТелоПисьма,5)="file:" тогда // ВК.ЗагрузитьИзФайла(СокрЛП(сред(ТелоПисьма,6))); ТекстСообщения=""; ФайлТекстаСообщения=Новый ТекстовыйДокумент; ФайлТекстаСообщения.Прочитать(СокрЛП(сред(ТелоПисьма,6))); ТекстСообщения=ФайлТекстаСообщения.ПолучитьТекст(); Сообщение.Тексты.Добавить(ТекстСообщения,ТипТекстаПочтовогоСообщения.HTML); Иначе Сообщение.Тексты.Добавить(ТелоПисьма,ТипТекстаПочтовогоСообщения.ПростойТекст); КонецЕсли; Если ТипЗНЧ(ИмяФайла)=Тип("Строка") и ЗначениеЗаполнено(ИмяФайла) тогда ФайлСообщения=Новый Файл(ИмяФайла); Сообщение.Вложения.Добавить(ИмяФайла,ФайлСообщения.Имя); ИначеЕсли ТипЗнч(ИмяФайла)=Тип("Массив") тогда Для каждого МЗнач из ИмяФайла Цикл Сообщение.Вложения.Добавить(ИмяФайла.ПолноеИмя,ИмяФайла.Имя); КонецЦикла; КонецЕсли; Почта=Новый ИнтернетПочта; Попытка Почта.Подключиться(Профиль); Исключение Сообщить("Ошибка отправки файла: "+ИмяФайла); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP); //СообщенияОтправки=Почта.Послать(Сообщение,ОбработкаТекстаИнтернетПочтовогоСообщения.НеОбрабатывать,ПротоколИнтернетПочты.SMTP); Исключение Сообщить(Получатель.ЭлПочта); Сообщить(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы("file:G:\Bases2\Balance.htm"); Сообщить(Получатель.Наименование); Сообщить(ТемаПисьма); Почта.Отключиться(); КонецПроцедуры |
Ответили:
пост #10
16.10.2017
13:19
#10
Ответ на
пост №9
Илья Привалов, у тебя в циклах не используется итераторы (строка,строкаТаблицы) Ответили:
пост #11
- 1
- 2
Читают тему
(гостей: 1)