Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема 7.7 + imap (число прочтений - 3200 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
7.7 + imap
22. Ноября 2016 :: 08:11
Печать  
Каким инструментом поработать с imap-почтовым ящиком из 7.7 ?
Без установки почтовых клиентов.
Известные мне ВК rom-mail и dialmail не умеют imap.
  

1&&2&&3
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 7.7 + imap
Ответ #1 - 22. Ноября 2016 :: 09:16
Печать  
Хочешь недоделанную ВК Curl1с?
Ну... она у меня с егаис работает год считай, подтекает, на доделать времени нет ;(
Curl все умеет...
Но парсить список сообщений вручную придется.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 7.7 + imap
Ответ #2 - 22. Ноября 2016 :: 09:52
Печать  
Djelf писал(а) 22. Ноября 2016 :: 09:16:
Хочешь недоделанную ВК Curl1с?

спасибо за доверие, но откажусь

если Цитата:
Curl все умеет...
, то режим командной строки меня тоже устроит. попробую.
  

1&&2&&3
Наверх
 
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 7.7 + imap
Ответ #3 - 22. Ноября 2016 :: 10:16
Печать  
Ну, она не в том смысле не доделанная, что не работает.
Получает/отсылает все. Даже через тор-прокси работает...
Я застрял на оформлении апи 1с`овской части ;(
У 8ки объектов навалом, а у curl все через хидеры делается.
Ну вот сделал объекты Источник, Получатель, УстановитьПараметр (установка хидера) и Выполнить... и застрял ;(
Для отправки/получения чего угодно этого достаточно, а вот стоит ли обертывать ftp/http и т.п. в отдельные процедуры или проще обернуть в класс я вот как то засомневался, вот и считаю ее поэтому недоделанной.
Ну и с сокетами (ssh клиент внутри 1с) вообще непонятно как быть, не дошел до решения этого вопроса.

P.S. делал для ускорения обмена всяких интеграций под Linux. ssl в wine вообще не работает, а эта штука работает и работает раз в 10 быстрее консольного curl на большом количестве файлов. Правда 1.3мб, но в нее openssl и zlib вшиты...
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 7.7 + imap
Ответ #4 - 23. Ноября 2016 :: 12:11
Печать  
Djelf писал(а) 22. Ноября 2016 :: 09:16:
Но парсить список сообщений вручную придется.

Да уж. Долго гуглил к какому месту прикладывать этот самый mime-formatted message.

А оказалось такой простой код:
Код
Выбрать все
	Message = СоздатьОбъект("CDO.Message");
	Stream = Message.GetStream();
	Stream.LoadFromFile(мВывод);
	Stream.Flush();
	Сообщить(Message.To);
	Сообщить(Message.From);
	Сообщить(Message.Subject);
	Сообщить(Message.TextBody);
 


где мВывод - путь к файлу полученному в результате fitch
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 7.7 + imap
Ответ #5 - 23. Ноября 2016 :: 13:24
Печать  
Небольшой КОП:

Код
Выбрать все
//#класс ПочтаIMAP = КОП_ПочтаIMAP.ert
//#{
//#}

//Автор: Трапезников Дмитрий, trad
//2016 год

//Класс реализует минимальный интерфейс для получения сообщений с IMAP сервера
//Для взаимодействия с сервером используется утилита curl (https://curl.haxx.se/)
//Для десериализации MIME сообщений используется  CDO.Message (https://msdn.microsoft.com/en-us/library/ms526453(v=exchg.10).aspx)

Перем Сервер Экспорт;
Перем Пользователь Экспорт;
Перем Пароль Экспорт;
Перем Папка Экспорт;

Перем ПутьКурл Экспорт;
Перем мВывод;


//*** ПолучитьВывод
Функция ПолучитьВывод()
	Перем Данные;

	Если ФС.СуществуетФайл(мВывод)=1 Тогда
		Данные="";
		Текст = СоздатьОбъект("Текст");
		Текст.Открыть(мВывод);
		Для Тек = 1 По Текст.КоличествоСтрок() Цикл
			Стр = Текст.ПолучитьСтроку(Тек);
			Данные = Данные + Стр + РазделительСтрок;
		КонецЦикла;
		ФС.УдалитьФайл(мВывод);
	КонецЕсли;

	Возврат Данные;
КонецФункции


//*** ВыполнитьЗапрос
Функция ВыполнитьЗапрос(Запрос="", ИД="") //LIST by default
	Если ФС.СуществуетФайл(мВывод)=1 Тогда
		ФС.УдалитьФайл(мВывод);
	КонецЕсли;

	УРЛ = "imap://"+СокрЛП(Сервер)+"/"+СокрЛП(Папка);
	Если ПустаяСтрока(ИД)=0 Тогда
		УРЛ = УРЛ + ";UID="+ИД;
	КонецЕсли;

	Команда = ПутьКурл;
	Команда = Команда + " --url """+УРЛ+"""";
	Команда = Команда + " --user """+СокрЛП(Пользователь)+":"+СокрЛП(Пароль)+"""";
	Команда = Команда + " --output """+мВывод+"""";
	Если ПустаяСтрока(Запрос)=0 Тогда
		Команда = Команда + " --request """+Запрос+"""";
	КонецЕсли;

	КомандаСистемы(Команда);

КонецФункции


//*** ПолучитьСообщение
Функция ПолучитьСообщение(НомерСообщения)
	Перем Сообщение;

	ВыполнитьЗапрос(, НомерСообщения);

	Если ФС.СуществуетФайл(мВывод)=1 Тогда
		Сообщение = СоздатьОбъект("CDO.Message");
		Stream = Сообщение.GetStream();
		Stream.LoadFromFile(мВывод);
		Stream.Flush();
		ФС.УдалитьФайл(мВывод);
	КонецЕсли;

	Возврат Сообщение;
КонецФункции


//*** ПолучитьСФильтром
Функция ПолучитьСФильтром(Фильтр) Экспорт
	//после вызова не прочитанные сообщения становятся прочитанными
	Сп = СоздатьОбъект("СписокЗначений");

	ВыполнитьЗапрос("SEARCH "+Фильтр);
	Результат = ПолучитьВывод();

	Если Лев(Результат, 8) = "* SEARCH" Тогда
		Результат = СокрЛП(Сред(Результат, 9));
		Пока ПустаяСтрока(Результат)=0 Цикл

			Поз = Найти(Результат, " ");
			Если Поз=0 Тогда
				НомерСообщения = Результат;
				Результат = "";
			Иначе
				НомерСообщения = Лев(Результат, Поз-1);
				Результат = СокрЛ(Сред(Результат, Поз+1));
			КонецЕсли;

			Сообщение = ПолучитьСообщение(НомерСообщения);
			Сп.ДобавитьЗначение(Сообщение);

		КонецЦикла;
	КонецЕсли;

	Возврат Сп;
КонецФункции


//*** ПолучитьНовые
Функция ПолучитьНовые() Экспорт

	Возврат ПолучитьСФильтром("NEW");

КонецФункции


//*** ПолучитьНеПрочитанные
Функция ПолучитьНеПрочитанные() Экспорт

	Возврат ПолучитьСФильтром("UNSEEN");

КонецФункции


//*** ПолучитьНеПрочитанные
Функция ПолучитьВсе() Экспорт

	Возврат ПолучитьСФильтром("ALL");

КонецФункции


//*** Конструктор
Процедура Конструктор()
	мВывод = КаталогВременныхФайлов()+"imap_via_curl_output.txt";
КонецПроцедуры
 

  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 7.7 + imap
Ответ #6 - 23. Ноября 2016 :: 13:25
Печать  
Код
Выбрать все
//*******************************************
Процедура Сформировать()

	ПочтаIMAP = СоздатьОбъект("ПочтаIMAP");
	ПочтаIMAP.Сервер = "";
	ПочтаIMAP.Пользователь = "";
	ПочтаIMAP.Пароль = "";
	ПочтаIMAP.Папка = "inbox";
	ПочтаIMAP.ПутьКурл = КаталогИБ()+"ВК\curl.exe";

	Сообщения = ПочтаIMAP.ПолучитьВсе();
	Для Тек=1 По Сообщения.РазмерСписка() Цикл
		Сообщение = Сообщения.ПолучитьЗначение(Тек);
		Сообщить(Сообщение.To);
		Сообщить(Сообщение.From);
		Сообщить(Сообщение.Subject);
		Сообщить(Сообщение.TextBody);
 	КонецЦикла;

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

  

1&&2&&3
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: 7.7 + imap
Ответ #7 - 23. Ноября 2016 :: 15:47
Печать  
Используем объект mailbee http://www.afterlogic.com/mailbee/objects

Он платный.
  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
Djelf
God Member
*****
На связи


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 7.7 + imap
Ответ #8 - 23. Ноября 2016 :: 16:03
Печать  
trad писал(а) 23. Ноября 2016 :: 13:24:
Небольшой КОП:

Рано или поздно, но точно пригодится... Спасибо!
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать