Руководство компании, хочет получать оперативную сводку продаж по фирме Руководство компании, хочет получать оперативную сводку продаж по фирме на свой почтовый ящик с обратной связью. То есть, посылая письмо на определенный ящик, программа составляет отчет о продажах на текущий день и отсылает на ящик отправителя.
Технический аспект реализации. на почтовом сервере компании заводим ящик autoreport.xxx.ru , в глобальный модуль в предопределенную процедуру ПриНачалеРаботыСистемы вставляем проверку строки запуска 1С для того, что бы определить момент старта проверки поступления новых писем в ящик.
Код 1C v 8.х
Процедура ПриНачалеРаботыСистемы()
Если Найти(ПараметрЗапуска,"changemail")>0 Тогда
Форма = Обработки.SaletoMail.ПолучитьФорму();
Форма.ОтсылкаПоЗаказу();
ЗавершитьРаботуСистемы(Ложь);
конецЕсли;
КонецПроцедуры
В планировщик задач вписываем запуск 1С Предприятия в “C:\Program Files\1cv8\bin\1cv8.exe” enterprise /DisableStartupMessages /smain\demo /cchangemail и ставим запуск каждые 5 минут. После запуска 1С проверяет переданный параметр если он подходит то происходит вызов внешней обработки в которой формируется отчет и происходит передача отчета обратно на ящик отправителя. Во внешнюю обработку писем процедуру ОтсылкаПоЗаказу() которая проверяет ящик на наличие писем, делает минимальную проверку , но то, что письмо пришло из нашего почтового сервера и отсылает продажи на адрес отправителя.
Код 1C v 8.х
Процедура ОтсылкаПоЗаказу()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераSMTP = "mail.xxx.ru";
Профиль.АдресСервераPOP3 = "mail.xxx.ru";
Профиль.ПортSMTP = 25;
Профиль.ПортPOP3 = 110;
Профиль.Пользователь = "sale";
Профиль.Пароль = "Report";
Почта = Новый ИнтернетПочта;
Почта.Подключиться(Профиль);
Массив = Новый Массив; Сообщения = Почта.Выбрать(true ,Массив);
// true для того, что бы очистить обработанные сообщения
Для КолПисем= 1 По Сообщения.Количество() Цикл
ТекПисьмо = Сообщения.Получить(КолПисем-1);
Если (Найти(ТекПисьмо.Отправитель.Адрес,"xxx.ru")>0) and (НРег(ТекПисьмо.Тема)="magicsale") тогда Письмо = Новый ИнтернетПочтовоеСообщение; Письмо.ИмяОтправителя = "sale";
Сообщение = Новый ИнтернетПочтовоеСообщение;
Письмо.Тексты.Добавить("Продажи дня" + ТекущаяДата());
Письмо.Получатели.Добавить(""+Сообщения.Получить(КолПисем-1).Отправитель.Адрес);
// ….. Поскипано
// ….. Формируем отчет о продажах и сохраняем его во внешний файл , или текст.
// ….. вкладываем отчет как приатаченный файл или тело сообщения.
Почта.Послать(Письмо);
КонецЕсли;
КонецЦикла;
Почта.Отключиться();
КонецПроцедуры
Отправка отчетов из 1С по электронной почте (E-Mail) Категория:
Полезные, Универсальные Функции Отправка почтового сообщения на локальный MS Office Outlook с вложенным файлом Код 1C v 8.х // Пробуем подключиться
Профиль = Новый ИнтернетПочтовыйПрофиль;
// Получение почты нам не нужно, коментируем
// Профиль.АдресСервераPOP3 = POP3Сервер;
Профиль.АдресСервераSMTP = СокрЛП(Константы.SMTP SERVER.Получить()); // айпишник екченжа
//Если ВремяОжиданияСервера > 0 Тогда
// Профиль.ВремяОжидания = ВремяОжиданияСервера;
//КонецЕсли;
Профиль.Пароль = СокрЛП(Константы.SMTP SERVERPASSWORD.Получить());
Профиль.Пользователь = СокрЛП(Константы.SMTP SERVERLOGIN.Получить());
//Профиль.ПортPOP3 = ПортPOP3;
Профиль.ПортSMTP = СокрЛП(Константы.SMTP SERVERPORT.Получить());
Профиль.ПарольSMTP = СокрЛП(Константы.SMTP SERVERPASSWORD.Получить());
Профиль.ПользовательSMTP = СокрЛП(Константы.SMTP SERVERLOGIN.Получить());
//Профиль.ПарольSMTP = УчетнаяЗапись.Пароль;
//Профиль.ПользовательSMTP = УчетнаяЗапись.Логин;
ИнтернетПочта = Новый ИнтернетПочта;
Попытка
ИнтернетПочта.Подключиться(Профиль);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.ИмяОтправителя = "1C-ka";
ПочтовоеСообщение.Отправитель = СокрЛП(Отправитель.Email);
ПочтовоеСообщение.Тема = Тема;
ПочтовоеСообщение.Получатели.Добавить(СокрЛП(Получатель.Email));
ПочтовоеСообщение.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.ПростойТекст);
Если Не пустаястрока(файл) Тогда
Данные = Новый ДвоичныеДанные(файл);
ПочтовоеСообщение.Вложения.Добавить(Данные,файлн);
конецесли;
попытка
ИнтернетПочта.Послать(ПочтовоеСообщение);
исключение
Сообщить(ОписаниеОшибки());
конецпопытки;
Категория:
Работа с Интернет, Почтой (Mail), FTP Практическая работа с почтой (E-mail,The Bat, Outlook, Mozilla Thunderbird) Код 1C v 8.х Попытка
ОтправитьПоПочте2(ТекСтрока); // работает с Батом
Исключение
Попытка
ОтправитьПоПочте1(ТекСтрока); // работает с Аутлуком, но переспрашивает при отправке
Исключение
Сообщить_и_записать("Ошибка при отправке почты - "+ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПопытки;
Процедура ОтправитьПоПочте1(ТекСтрока)
Почта = Новый Почта;
Сообщение = Новый ПочтовоеСообщение;
//Работает с Аутглуком, но переспрашивает при отправке
//не работает с Батом 3.60
Почта.Подключиться("name@mysite.dp.ua","password");
Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.Текст="Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл";
Почта.Послать(Сообщение);
Почта.Отключиться();
УдалитьФайлы(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
КонецПроцедуры
Процедура ОтправитьПоПочте2(ТекСтрока)
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
ПочтовыйПрофиль.АдресСервераPOP3 = "pop3.mysite.dp.ua";
ПочтовыйПрофиль.АдресСервераSMTP = "smtp .mysite.dp.ua";
ПочтовыйПрофиль.ПортSMTP = 25;
ПочтовыйПрофиль.ПортPOP3 = 110;
ПочтовыйПрофиль.Пользователь = "name";
ПочтовыйПрофиль.Пароль = "password";
ПочтовыйПрофиль.ВремяОжидания = 60;
Сообщение = Новый ИнтернетПочтовоеСообщение ;
Сообщение.Вложения.Добавить(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
Сообщение.Получатели.Добавить(ТекСтрока.филиал.email);
Сообщение.Тема ="Проигнорированные документы в офисе. Письмо сгенерированно роботом";
Сообщение.ИмяОтправителя="Обмен";
Сообщение.Отправитель="name@mysite.dp.ua";
Текст = Сообщение.Тексты.Добавить("Проверьте, будь ласка эти документы ПОСЛЕ получения обновления из офиса. Ваши изменения в этих документах не попали в базу. Откройте прикрепленный файл");
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
Почта = Новый ИнтернетПочта();
Почта.Подключиться(ПочтовыйПрофиль);
Почта.Послать(Сообщение);
Почта.Отключиться();
УдалитьФайлы(ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование));
КонецПроцедуры
А вот так 1с работает с Мозилой Сундербердом (который хорошо поддерживает IMAP):
Код 1C v 8.х ПутьМозиллы = """C:/Program Files/Mozilla Thunderbird/thunderbird.exe""";
Текст = Новый ЗаписьТекста(КаталогОбмена + "sendfiletofilial"+Строка(ТекСтрока.филиал.наименование)+".bat", КодировкаТекста.OEM);
Текст.ЗаписатьСтроку("@echo off");
Текст.ЗаписатьСтроку("@echo Отправка проигнорированных писем на филиал"+Строка(ТекСтрока.филиал.наименование));
СтрокаЗапуска = " -compose to='"+ТекСтрока.филиал.email+"',cc='name@mysite.dp.ua',subject=""Проигнорированные документы в офисе. Письмо сгенерированно роботом"",body=""Проигнорированные документы в офисе. Письмо сгенерированно роботом"",attachment=""file://";
Файл = """"+ПолучитьИмяФайлаПодразделения(ТекСтрока.филиал.наименование)+"""";
Текст.ЗаписатьСтроку(ПутьМозиллы+СтрокаЗапуска +Файл);
Текст.ЗаписатьСтроку("del "+Файл);
Текст.Закрыть();
ЗапуститьПриложение(КаталогОбмена + "sendfiletofilial"+Строка(ТекСтрока.филиал.наименование)+".bat",КаталогОбмена)
Получение почты
Код 1C v 8.х
Процедура КнопкаВыполнитьНажатие(Кнопка)
Почта = Новый ИнтернетПочта;
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АдресСервераPOP3 = "192.168.0.2";
Профиль.Пользователь = "romix";
Профиль.Пароль = "ТутНапишитеПароль";
Почта.Подключиться(Профиль);
МассивПисем = Почта.Выбрать(Ложь);
Для Каждого Письмо из МассивПисем Цикл
Сообщить("Получено письмо с заголовоком: "+Письмо.Тема);
Для Каждого Вложение из Письмо.Вложения Цикл
Сообщить("Вложение: "+Вложение.ИмяФайла);
Вложение.Данные.Записать("c:\tempdata\"+Вложение.ИмяФайла);
КонецЦикла;
Для Каждого Текст из Письмо.Тексты Цикл
Сообщить("Текст: "+Текст.Текст);
Текст.Данные.Записать("c:\tempdata\ТекстСообщения.txt");
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Автор: 1CLama
Категория:
Работа с Интернет, Почтой (Mail), FTP