![]() |
|
Почтовый клиент | ☑ | ||
---|---|---|---|---|
0
ildary
16.07.12
✎
15:07
|
Уважаемые специалисты, посоветуйте пожалуйста, чем лучше принять почту и сохранить вложенный файл на диск (для собственного обмена файлами между подразделениями)? Попробовал TBird с каким-то плагином - и он вроде бы работает как надо, но раз в три дня перестает - т.е. письмо пришло, но правило не отработалось. Хочется чего-то в стиле "поставил и забыл", а не "поставил и мучайся". Никакие шашечки не нужны - главное - скачать письмо и положить файл в папку (не искажая его имя, т.е. если пришло такое же - то затереть предыдущий файл).
|
|||
1
Ринат-СПб
16.07.12
✎
15:39
|
The Bat
не? |
|||
2
ildary
16.07.12
✎
15:51
|
(1) да, бат бы подошел, но ради мелкой задачи покупать такую программу - не совсем правильно.
|
|||
3
zak555
16.07.12
✎
15:53
|
на почтовом сервер linux ?
|
|||
4
Ринат-СПб
16.07.12
✎
15:54
|
(2) 1300 руб. для конторы дорого? О_о
ну можно найти и таюлэтку ;) |
|||
5
Ринат-СПб
16.07.12
✎
15:54
|
*таблэтку
|
|||
6
wostroga
16.07.12
✎
15:54
|
ну вот на вскидку..http://www.codeode.com/popclient.html
А можно вообще самому написать :), например вот так http://forum.script-coding.com/viewtopic.php?id=3196 А еще хорошо помогает Гугл, и заметьте, что про Гугл только третьим пунктом! :) |
|||
7
Vladal
16.07.12
✎
15:55
|
Вот код, который читает почту и сохраняет вложения, да еще распаковывает запароленные архивы. При успехе - удаляет.
Конструктивная критика и предложения приветствуются. // Шаблон имени файла обмена - Discounts_XX_YY, // где XX - код узла обмена отправителя, // YY - код узла обмена получателя Процедура ЗаписатьСообщениеСИзменениями() Экспорт // Проверка, есть ли данные для обмена ЕстьНовые = Ложь; ВыборкаДанных = ПланыОбмена.ВыбратьИзменения(Ссылка, НомерОтправленного+1); Пока ВыборкаДанных.Следующий() Цикл ЕстьНовые = Истина; Прервать; КонецЦикла; Если НЕ ЕстьНовые Тогда Возврат; КонецЕсли; РасширениеZIP = ".zip"; РасширениеXML = ".xml"; // Создаём временный файл по маске XX_Discounts.xml, где XX - код текущего филиала Каталог = КаталогВременныхФайлов() + Константы.КодБД.Получить(); СоздатьКаталог(Каталог); ПутьФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\"); ИмяФайла = "Discounts_" + СокрП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код); // Запись XML ЗаписьХМЛ = Новый ЗаписьXML; ЗаписьХМЛ.ОткрытьФайл(ПутьФайла + ИмяФайла + РасширениеXML); ЗаписьХМЛ.ЗаписатьОбъявлениеXML(); // Инфраструктура сообщений ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ, Ссылка); // Получить выборку измененных данных ВыборкаИзменения = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); Пока ВыборкаИзменения.Следующий() Цикл ЗаписатьXML(ЗаписьХМЛ, ВыборкаИзменения.Получить()); КонецЦикла; // Закрытие объектов ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьХМЛ.Закрыть(); ЗаписьХМЛ = Неопределено; // Архивируем ФайлАрхива = Новый ЗаписьZipФайла(ПутьФайла + ИмяФайла + РасширениеZIP, "Discounts",, МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Максимальный); ФайлАрхива.Добавить(ПутьФайла + ИмяФайла + РасширениеXML, РежимСохраненияПутейZIP.СохранятьОтносительныеПути); ФайлАрхива.Записать(); ФайлАрхива = Неопределено; // Отправляем как вложение на почту Сообщение = Новый ИнтернетПочтовоеСообщение; Сообщение.Тексты.Добавить("Обмен =" + ПланыОбмена.Филиалы.ЭтотУзел().Наименование + "= с =" + Ссылка.Наименование + "="); Сообщение.Отправитель = Константы.ПочтаПользовательSMTP.Получить(); Сообщение.Тема = Имяфайла + РасширениеXML; Сообщение.Получатели.Добавить(Константы.ПочтаПользовательSMTP.Получить()); Сообщение.Вложения.Добавить(Новый ДвоичныеДанные(ПутьФайла + ИмяФайла + РасширениеZIP), ИмяФайла + РасширениеZIP); ПрофильПочты = Новый ИнтернетПочтовыйПрофиль; ПрофильПочты.АдресСервераSMTP = Константы.ПочтаАдресСервераSMTP.Получить(); ПрофильПочты.ПортSMTP = Константы.ПочтаПортSMTP.Получить(); ПрофильПочты.АдресСервераPOP3 = Константы.ПочтаАдресСервераPOP3.Получить(); ПрофильПочты.ПортPOP3 = Константы.ПочтаПортPOP3.Получить(); ПрофильПочты.Пароль = Константы.ПочтаПароль.Получить(); ПрофильПочты.ПарольSMTP = Константы.ПочтаПарольSMTP.Получить(); ПрофильПочты.Пользователь = Константы.ПочтаПользователь.Получить(); ПрофильПочты.ПользовательSMTP = Константы.ПочтаПользовательSMTP.Получить(); ПрофильПочты.ВремяОжидания = Константы.ПочтаВремяОжидания.Получить(); Почта = Новый ИнтернетПочта; Попытка Почта.Подключиться(ПрофильПочты); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка Почта.ПолучитьЗаголовки(); Исключение Возврат; КонецПопытки; Попытка //Пытаемся послать письмо Почта.Послать(Сообщение); Исключение Сообщить(ОписаниеОшибки()); Почта.Отключиться(); Возврат; КонецПопытки; //отключение Почта.Отключиться(); КонецПроцедуры Процедура ПрочитатьСообщениеСИзменениями() Экспорт РасширениеZIP = ".zip"; РасширениеXML = ".xml"; // Имя временного файла Каталог = КаталогВременныхФайлов() + Константы.КодБД.Получить(); СоздатьКаталог(Каталог); ПутьФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\"); ИмяФайла = "Discounts_" + СокрЛП(Ссылка.Код) + "_" + СокрП(ПланыОбмена.Филиалы.ЭтотУзел().Код); // Читаем почту и загружаем файл ПрофильПочты = Новый ИнтернетПочтовыйПрофиль; ПрофильПочты.АдресСервераPOP3 = Константы.ПочтаАдресСервераPOP3.Получить(); ПрофильПочты.ПортSMTP = Константы.ПочтаПортSMTP.Получить(); ПрофильПочты.ПользовательSMTP = Константы.ПочтаПользовательSMTP.Получить(); ПрофильПочты.ПарольSMTP = Константы.ПочтаПарольSMTP.Получить(); ПрофильПочты.АдресСервераSMTP = Константы.ПочтаАдресСервераSMTP.Получить(); ПрофильПочты.ПортPOP3 = Константы.ПочтаПортPOP3.Получить(); ПрофильПочты.Пользователь = Константы.ПочтаПользователь.Получить(); ПрофильПочты.Пароль = Константы.ПочтаПароль.Получить(); ПрофильПочты.ВремяОжидания = Константы.ПочтаВремяОжидания.Получить(); Почта = Новый ИнтернетПочта; Попытка Почта.Подключиться(ПрофильПочты); Исключение //Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка Заголовки = Почта.ПолучитьЗаголовки(); Исключение //Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; //Если Заголовки.Количество() = 0 Тогда // //ОбщегоНазначения.СообщитьИнформацию("В почтовом ящике нет входящих сообщений!"); // Возврат; //КонецЕсли; // Загрузка сообщений в массив, сначала только загрузка, после импорта удалим Сообщения = Почта.Выбрать(Ложь, Заголовки); // Ложь чтобы оставались письма в ящике КоличествоПисем = Сообщения.Количество()-1; Для Индекс = 0 По КоличествоПисем Цикл Сообщение = Сообщения[Индекс]; // ВЛ - 2012-06-10 - Переделал, чтобы обработанные письма удалялись из ящика. //// Пропустим только почту за последние 3 дня //ГлубинаПроверки = Константы.ПочтаГлубинаПроверки.Получить(); //Если НачалоДня(ТекущаяДата()) - НачалоДня(Сообщение.ДатаОтправления) > ГлубинаПроверки * 60*60*24 Тогда // Продолжить; //КонецЕсли; // Отсев ненужных писем по теме сообщения Если Сообщение.Тема <> ИмяФайла + РасширениеXML Тогда Продолжить; КонецЕсли; // Читаем вложения каждого письма и сверяем с ожидаемым именем для этого узла обмена Для каждого Вложение Из Сообщение.Вложения Цикл Если Вложение.ИмяФайла <> ИмяФайла + РасширениеZIP Тогда Продолжить; КонецЕсли; ИмяФайлаВложения = ПутьФайла + ИмяФайла + РасширениеZIP; ДанныеОбмена = Вложение.Данные; ДанныеОбмена.Записать(ИмяФайлаВложения); // Распакуем выгруженный ZIP-архив ФайлАрхива = Новый ЧтениеZIPФайла(ИмяФайлаВложения, "Discounts"); ФайлАрхива.ИзвлечьВсе(ПутьФайла, РежимВосстановленияПутейФайловZIP.Восстанавливать); ФайлАрхива.Закрыть(); // Работаем с полученным файлом обмена ИмяФайлаОбмена = ПутьФайла + ИмяФайла + РасширениеXML; Файл = Новый Файл(ИмяФайлаОбмена); Если НЕ Файл.Существует() Тогда Возврат; КонецЕсли; // Чтение документов XML ЧтениеХМЛ = Новый ЧтениеXML; Попытка ЧтениеХМЛ.ОткрытьФайл(ИмяФайлаОбмена); Исключение ОбщегоНазначения.СообщитьОбОшибке("" + ТекущаяДата() + " -- " + ОписаниеОшибки()); Продолжить; КонецПопытки; // Чтение файла ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения(); Попытка ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ); Исключение ТекстОшибки = "" + ТекущаяДата() + " -- " + ОписаниеОшибки(); ОбщегоНазначения.СообщитьОбОшибке(ТекстОшибки); // Проверка текста ошибки Если Найти(ТекстОшибки, "Номер сообщения меньше или равен номеру ранее принятого сообщения") > 0 Тогда // Это сообщение загрузили раньше, но по какой-то причине не удалили УдалитьСообщение(Почта, Сообщения, Индекс); // Закрытие объектов ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеХМЛ.Закрыть(); УдалитьФайлы(ИмяФайлаОбмена); УдалитьФайлы(ИмяФайлаВложения); Продолжить; //Иначе // Возврат; КонецЕсли; КонецПопытки; // Сообщение не предназначено для этого узла Если ЧтениеСообщения.Отправитель <> Ссылка Тогда ВызватьИсключение "Неверный узел"; КонецЕсли; // Читаем данные из сообщения ХМЛ сериализации Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл // Удаляем регистрацию изменений для узла отправителя сообщения ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерПринятого); Данные = ПрочитатьXML(ЧтениеХМЛ); // Записать полученные данные Попытка Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; Данные.ОбменДанными.Загрузка = Истина; Данные.Записать(); Исключение ОбщегоНазначения.СообщитьОбОшибке("" + ТекущаяДата() + " -- " + ОписаниеОшибки()); Возврат; КонецПопытки; КонецЦикла; // Закрытие объектов ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеХМЛ.Закрыть(); УдалитьФайлы(ИмяФайлаОбмена); УдалитьФайлы(ИмяФайлаВложения); УдалитьСообщение(Почта, Сообщения, Индекс); КонецЦикла; // Чтение почтовых вложений КонецЦикла; // Чтение почтовых сообщений Почта.Отключиться(); // todo: будет ли читаться СМТП после отключения ПОП3? КонецПроцедуры Процедура УдалитьСообщение(Почта, Сообщения, Индекс); |
|||
8
Vladal
16.07.12
✎
15:57
|
Упс... Ветка не в 1С и тэги не сработали
|
|||
9
wostroga
16.07.12
✎
15:58
|
(7) Все равно это ВЕЩЬ!!!! мне понравилось :)
|
|||
10
ildary
16.07.12
✎
16:02
|
(4) для только что открывшегося магазина, которому еще свое открытие отбивать и отбивать - это много. Насчет таблетки - это уже давно не наш метод.
(6) этот самый pop клиент сохраняет все файлы только с уникальными именами (а мне надо, чтобы при совпадении имени вложения - старый файл затирался. также не подходят всякие Dream Mail, FoxMail, Sylpheed - не умеют сохранять вложения. vbs скрипт попробую помучать, спасибо. (7) спасибо, у нас 7.7. |
|||
11
Ринат-СПб
16.07.12
✎
16:07
|
(10) я балдею :)
ладно, мое дело предложить - ваше отказаться :) З.Ы. У меня стоит Мышь с настроенными правилами, прайсы выгружаются и не парюсь уже года четыре. А 1.3 килорубля - это не цена, ты в кино с девушкой сходишь и то больше можешь оставить :) |
|||
12
ildary
16.07.12
✎
16:10
|
(11) во первых - эти деньги не мои, я там не директор, во вторых - неправильно для мелкой задачи покупать большое решение.
|
|||
13
Ринат-СПб
16.07.12
✎
16:17
|
(12) Сколько тебе заплатят за решение данной задачи? Сколько времени ты потратишь на поиск и решение данной задачи?
По моим критериям - это как раз таки логичное и самое дешевое решение данной задачи. Конечно можешь нанять кодера, напишет тебе программулину для решения этой "маленькой" задачи. Она тебе выполнит только данную задачу и все... Можешь поискать и протестировать десятки программ, затратив пяток человеко-часов... но ты найдешь прекрасное и бесплатное решение :))) Сорь за оффтоп :))) |
|||
14
wostroga
16.07.12
✎
16:17
|
(11) я тоже балдею по поводу (10)
|
|||
15
wostroga
16.07.12
✎
16:26
|
хотя в (10) все же было "спасибо"
ладно уж...на здоровье. |
|||
16
Vladal
16.07.12
✎
17:43
|
(10) Ну что же, правильно ставь задачу.
Если не указал ветку - опиши проблему в нулевом посте. Не сделал - напиши ниже, "ребята, я забыл - это для 7.7" Не написал - сам дурак. ИМХО. Для 7.7 есть внешние компоненты работы с почтой, в т.ч. посмотри и v7plus |
|||
17
ildary
16.07.12
✎
17:46
|
(16) замечу - я вообще не хотел приплетать в эту задачу 1С, ветка в теме ИТ, писал я про почтовый клиент, а не про обработку 1С или ее ВК.
|
|||
18
Vladal
16.07.12
✎
17:48
|
(17) Ну, пардоньте
|
|||
19
Vladal
16.07.12
✎
17:48
|
Используй скрипт - он будет брать твою почту и лепить в файл на диске, затирая существующий.
|
|||
20
ildary
16.07.12
✎
17:50
|
(19) спасибо, так и поступлю. Только удивляет меня, что такая простая задача, как выгрузка аттача в папку решена только у TheBat.
|
|||
21
smaharbA
16.07.12
✎
17:50
|
есть клиент от мс командной строки, не скажу как найти, где то на саппортМС
|
|||
22
Vladal
16.07.12
✎
17:54
|
Есть еще DLL - JMail
http://www.virtualsplat.com/email-sample-code/asp-jmail.asp К чему прицепишь по COM, там и будет работать - VBS, Delphi, 1C |
|||
23
Vladal
16.07.12
✎
17:54
|
(21) По-моему та утилита работает с дефолтным клиентом, и если он от Майкрософт. Могу ошиьбаться
|
|||
24
milan
16.07.12
✎
18:02
|
(22) +1, давно пользуемся все работает, вские зибаты и прочие аутлуки в топку. Зачем вставлять дополнительное звено, в котором точно возникнет сбой - непонятно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |