Массовая Рассылка
Показывать по
10
20
40
сообщений
- 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
- 1
- 2
Читают тему
(гостей: 1)