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

Тема в разделе "1C и всё что с ней связано", создана пользователем gorlanovmax, 25 июн 2008.

  1. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

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

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

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

    kaa Гость

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

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

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

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

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

    КонецЦикла;

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

    gorlanovmax Well-Known Member
    1C Team

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

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

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

    kaa Гость

    поставте 1

    заголовки загруженых писем храните где-нибудь в текстовом файле, и сверяйте
     
  5. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    а если заголовки совпадут? тогда новое письмо может пропасть
     
  6. svintus

    svintus Гость

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


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

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

    gorlanovmax Well-Known Member
    1C Team

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

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

    svintus Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    проверь правильность написания серверов и логина-пароля (раздел помошь на сайте). у меня все работает, сделано все идентично

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

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

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

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

    GRblSHA Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    если это ftp, то у клиента теоретически есть доступ ко всем файлам, а мне этого не нужно
     
  12. GRblSHA

    GRblSHA Гость

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

    svintus Гость

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

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

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

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


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


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

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Если ФС.СуществуетФайл(Папка) =1 тогда //почему Папка, должен быть ПолныйПуть
    Иначе
    ФС.СоздатьКаталог(Папка); // то же самое.

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

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

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

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

    svintus Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Код (Text):
    Процедура Сформировать()
    перем ВК;
    Попытка
    Если ЗагрузитьВнешнююКомпоненту("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);
    КонецПроцедуры

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

    svintus Гость

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

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

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

    svintus Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    а зачем все это сохранять. у меня сделано проще: заданы константы, поменял константу и все дела.

    версия 1.4.1.0.

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

    svintus Гость

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


    и какой плюсик нажать чтобы поблагодарить?
     
Загрузка...

Поделиться этой страницей