• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Rom-mail. Почти, но не совсем

  • Автор темы gorlanovmax
  • Дата начала
G

gorlanovmax

Имеется задачка:
Необходимо собирать с электронной почты письма, в которых вложены dbf с заказами.
В принципе я уже все сделал. Собираем, открываем выбранный из списка, загружаем, создаем новый документ счет и т.д.

Но вот один нюанс. При проверке почты загружаются ВСЕ письма, даже прочитанные.
Из-за этого путаница, в списке файлов есть и новые заказы и старые(уже обработанные заказы).

Возможно ли чтобы Rom-Mail собирала только новые письма.
Вариант с удалением писем на сервере не особо катит, т.к. клиенту хочется чтобы письма оставались на сервере(ну типа мало ли что, и он захочет проверить заказы на электронке).
 
K

kaa

Может через заголовки
Код:
ВК=СоздатьОбъект("AddIn.AddInMail");
ВК.СерверПриема=СокрЛП(СерверПриема);
ВК.ПортПриема=СокрЛП(ПортПриема);
ВК.Логин=СокрЛП(Логин);
ВК.Пароль=СокрЛП(Пароль);
ВК.ОставлятьНаСервере=0;
ВК.ПоказыватьПредупреждения=0;

Если ВК.Подключиться("Прием")=0 Тогда
Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;

Для Индекс=1 По ВК.КоличествоСообщений() Цикл

Если ВК.ПолучитьЗаголовок(Индекс)=0 Тогда
Возврат;
КонецЕсли;

ТЗ.НоваяСтрока();
ТЗ.Пометка=1;
ТЗ.От=ВК.ИмяОтправителя+"<"+ВК.АдресОтправителя+">";
ТЗ.Тема=ВК.Тема;
ТЗ.Кому=ВК.АдресПолучателя;
ТЗ.ДатаОтправки=ВК.ДатаОтправки;
ТЗ.Размер=ВК.Размер;
ТЗ.Важность=ВК.Важность;
ТЗ.MessageID=ВК.IDMessage;
ТЗ.ТипПисьма=?(ВК.ТипПисьма=0,"text/plain","text/html");
ТЗ.Кодировка=ВК.Кодировка;
Для Инд=1 По ВК.КоличествоФайлов() Цикл
ВК.ПолучитьФайл(Инд);
ВК.СохранитьФайл(Инд,"");
КонецЦикла;

КонецЦикла;

ВК.Отключиться();
 
G

gorlanovmax

Может через заголовки

Нет как-то не так. Во-первых, у Вас параметр "ОставлятьНаСервере" равен 0, т.е после команды "Отключиться" все сообщеения на почтовом сервере будут удалены.

Во-вторых, Залоговок письма будет получен в любом случае, вне зависимости от того, прочитано раннее письмо или нет.

В этом-то и есть главная заковыка.
 
S

svintus

GorlanovMax добрый день!!я новичок в програмировании но уже столкнулся с похожей задачей !!но вот проблема немогу даже подключиться к серверу и помочь некому может поможете поделитесь опытом а насчет вашей проблемы я думаю так! да я согласин что надо хранить принятые файлы в текстовам файле но основным отличее я думаю можить быть время приема сообщений дата и точное время !я сомневаюсь что сообщение с одинакавым названием может прийти в один и тотже момент!!
если можно как нибудь взглянуть на ваш код!!


меня больше интиресует сам синтаксис подключения смотрите у меня почтовый ящик находиться на гугловском серваке gmail.com и я пишу так
Текст кода
ПрямаяПочта = СоздатьОбъект("AddIn.AddInMail");
ПрямаяПочта.СерверОтправки="SMTP.gmail.com";
ПрямаяПочта.ПортОтправки="25";
ПрямаяПочта.ПортПриема="110";
ПрямаяПочта.СерверПриема="pop.gmail.com";
ПрямаяПочта.Логин="galdarserver@gmail.com";
ПрямаяПочта.Пароль="*******";
Пинг=ПрямаяПочта.PingText;
Сообщить(Пинг);

но пинг отвечает что 100 процентов потерь!!в чем причина!
 
G

gorlanovmax

ты пропустил подключение к серверу
Если ПрямаяПочта.Подключиться("Прием")=0 Тогда
Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;

и в конце процедуры не забудь ПрямаяПочта.Оключиться();
 
S

svintus

GorlanovMax насколько я понимаю метод PingText работает до вызова процедуры Подключиться("Прием") в смысле должен работать!!а у меня почемуто неработает почему незнаю!!у меня в коде есть ПрямаяПочта.Подключиться("Прием")=0 Тогда но результат всегда 0!!!непойму почему может неправильно адрес сервера задаю?у меня нужный почтовый ящик находиться на Gmail.com!!
 
G

gorlanovmax

проверь правильность написания серверов и логина-пароля (раздел помошь на сайте). у меня все работает, сделано все идентично

попробуй проверить другую почту, например mail или yandex

в настройках gmail есть опция "включить pop для всех писем"

порт отправки 465, а приема 995.

внимательней надо читать справки, батенька :)
 
G

GRblSHA

А почему бы через ftp не попробовать в пакетном режиме?
 
G

gorlanovmax

если это ftp, то у клиента теоретически есть доступ ко всем файлам, а мне этого не нужно
 
G

GRblSHA

да нет сделать распределенную БД клиент периодический делает выгрузку на ftp а сервер через определенное время в пакетном режиме загружает изменения с ftp....
 
S

svintus

До сервера достучался тепер другая проблема при попытке записи файла 1с вылетает(закрываеться)может я что-то опять неправильно делаю ?вот мой код!
Если ПрямаяПочта.Подключиться("Прием")=1 Тогда
КолвоСообщений=ПрямаяПочта.КоличествоСообщений();
Сообщить("КоличествоСообщений="+КолвоСообщений);
Иначе
Сообщить("Неудалось Подключиться");
КонецЕсли;

Папка=Строка("Замовлення за "+Строка(РабочаяДата())+"\");
Каталог="С:\zamovlennya\";
Полныйпуть =Каталог+Папка;
Если ФС.СуществуетФайл(Папка) =1 тогда
Иначе
ФС.СоздатьКаталог(Папка);
Сообщить("создана папка"+папка);
КонецЕсли;
ПрямаяПочта.КаталогВложений=Полныйпуть;
Для Ном=1 по КолвоСообщений Цикл
ПрямаяПочта.ПолучитьСообщение(Ном);
Если ПрямаяПочта.КоличествоФайлов()<> 0 Тогда
Сообщить("Есть вложения");
Для колВл=1 по ПрямаяПочта.КоличествоФайлов() цикл
ПрямаяПочта.ПолучитьФайл(Ном);
ПрямаяПочта.СохранитьФайл(Ном,);
КонецЦикла;
КонецЕсли;
КонецЦикла;
ПрямаяПочта.Отключиться();

Если вот это "ПрямаяПочта.СохранитьФайл(Ном,);"закоментировать тогда 1с невырубаеться в чем причина непонимаю !!

GorlanovMax как у тебя загружаються все сообщения у меня наоборот загрухаються только непрочитаные!!и как после програмного прочтения установить реквизит что писмо прочтено?


GorlanovMax и еще помниться у вас была проблема с длинной имени ДБФ файла как вы ее решили ?


блин проблема за проблемой как заставить Rom-mail понимать кирилицу????????

в смысле в вложениях если оно(имя вложение )на руском оно его видит как сплошные подчеркивания что за беда?!"
 
G

gorlanovmax

Если ФС.СуществуетФайл(Папка) =1 тогда //почему Папка, должен быть ПолныйПуть
Иначе
ФС.СоздатьКаталог(Папка); // то же самое.

он не сохраняет, потому что каталог не создан, если я правильно понимаю.

с дилон имени dbf ничего не решишь, нужно влезать в 8 символов.

у меня принимает нормально, думаю проблема в gmail, слишком уж он навороченный, чем тебе не нравиться тот же mail.ru или yandex.ru. у меня работают без проблем

И кирилицу сохраняет нормально.
 
S

svintus

можно глянуть как ты извлекаеш и сохраняеш ДБФ файлы?
 
G

gorlanovmax

Код:
Процедура Сформировать()
перем ВК;
Попытка
Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll")=0 Тогда
Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
Исключение
Возврат;
КонецПопытки; 
ВК=СоздатьОбъект("AddIn.AddInMail");
ВК.СерверПриема=СокрЛП("pop.mail.ru");  
ВК.ПортПриема=СокрЛП("110");			
ВК.Логин=СокрЛП("******");	 
ВК.Пароль=СокрЛП("******");			 
ВК.ОставлятьНаСервере=0;
ВК.ПоказыватьПредупреждения=0;
Если ВК.Подключиться("Прием")=0 Тогда
Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;
ФайлПисем=Строка(КаталогИБ()+"Mail\List.dbf");
Контроль=СоздатьОбъект("XBase");
Контроль.ОткрытьФайл(ФайлПисем);
Если Контроль.Открыта()=0 Тогда
Контроль.ДобавитьПоле("OK",1,1,0);
Контроль.ДобавитьПоле("Data",2,12,0);
Контроль.ДобавитьПоле("Otprav",2,99,0);
Контроль.ДобавитьПоле("Subject",2,99,0);
Контроль.ДобавитьПоле("Adres",2,99,0);
Контроль.СоздатьФайл(ФайлПисем,);
КонецЕсли;
Новое.УдалитьСтроки();
Для Индекс=1 По ВК.КоличествоСообщений() Цикл
ВК.ПолучитьЗаголовок(Индекс);
ВК.ПолучитьТело(Индекс);
Тем=ВК.Тема;
Каталог=Строка(КаталогИБ()+"Mail\");
Контроль.Добавить();
Контроль.OK=1;
Контроль.Data=ВК.ДатаОтправки;
Контроль.Otprav=ВК.АдресОтправителя;
Контроль.Subject=Тем;
ВК.КаталогВложений=Каталог;
ВК.ПолучитьФайл(1);
ВК.СохранитьФайл(1,"");
Новое.НоваяСтрока();
Новое.Введено=1;
Новое.Дата=ВК.ДатаОтправки;
Новое.ОтКого=ВК.АдресОтправителя;
Новое.Тема=Тем;
Контроль.Adres=Каталог+ВК.ПолучитьФайл(1);
Контроль.Записать();
Новое.Путь=Каталог+ВК.ПолучитьФайл(1);
КонецЦикла;
Контроль.Записать();
Контроль.ЗакрытьФайл();
ВК.Отключиться();
КонецПроцедуры

Процедура ПриОткрытии()
Новое.Очистить();
Новое.НоваяКолонка("Введено","Число",1,0,"V",3);
Новое.НоваяКолонка("Дата","Строка",20,0,"Дата",9);
Новое.НоваяКолонка("Тема","Строка",,,"Заголовок",30);
Новое.НоваяКолонка("ОтКого","Строка",99,0,"Отправитель",20);
Новое.НоваяКолонка("Путь","Строка",99,0,"Место хранения");
Новое.ВыводитьПиктограммы(1);
КонецПроцедуры


ФайлПисем - это таблица, в которой хранятся все полученные письма.
Новое - это таблица в диалоге пользователя, в которой отображаются письма.
 
S

svintus

А какая версия Rom-mail У тебя стоит?

и еще ты в сыойствах можеш задать по умолчанию сервер логин пароль итд и сохранить все ето!

В свойствах роммайла! Сервис/параметры!
 
S

svintus

GorlanovMax пробовал с mail.ru и yandex.ru всеравно кирилица приходит в таком виде _______.DBF и попробуй разбери что за файл !!что делать?
 
G

gorlanovmax

а зачем все это сохранять. у меня сделано проще: заданы константы, поменял константу и все дела.

версия 1.4.1.0.

а с кирилицей не пробовал, ща попробую
 
S

svintus

TGorlanovMax попробуй у меня неполучилось!


и какой плюсик нажать чтобы поблагодарить?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!