8.х Работа с электронной почтой. Теряются письма

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Tasya, 4 окт 2016.

  1. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Добрый день!
    Может кто-нибудь что-нибудь подскажет.
    Платформа 8.2.19.76
    Клиент-серверный вариант работы
    Конфигурация ITIL

    Реализованы функции отправки и приема почты через установленный на сервере stunnel к серверу MS Exchange. Прием почты запускается регламентным заданием. Регламентное задание запускается раз в 5 секунд. Так вот, если на почту пришло два письма в эти 5 секунд, то в 1С приходит только одно, но из почтового ящика забираются два.
    Ниже код процедуры. Посоветуйте что-нибудь, куда копать.

    Код:
    Процедура ВыполнитьПриемЭлектроннойПочты() Экспорт
       
        УстановитьПривилегированныйРежим(Истина);
       
        Запрос = Новый Запрос;
        Запрос.Текст = ".........";
       
        ВыборкаУчетныхЗаписей = Запрос.Выполнить().Выбрать();
        Пока ВыборкаУчетныхЗаписей.Следующий() Цикл
           
            НаборПисем = ЗагрузитьСообщения(ВыборкаУчетныхЗаписей.УчетнаяЗапись);
           
            Если не НаборПисем = неопределено тогда
               
                Если НЕ НаборПисем.Количество() = 0 Тогда
                   
                    Для каждого Письмо Из НаборПисем Цикл
                       
                        ПисьмоСКоментарием = Ложь;
                        ПисьмоСПереходом = Ложь;
                        ПроцессСсылка = Неопределено;
                        ПисьмоHTML = Ложь;
                       
                        //Проверяем если письмо уже получено то не принимаем его
                        НайденноеПисьмо = Справочники.itilprofСообщениеЭлектроннойПочты.НайтиПоРеквизиту("MessageID", Письмо.ИдентификаторСообщения);
                        Если не НайденноеПисьмо.Пустая() тогда
                            Продолжить;
                        КонецЕсли;
                       
                       
                        ///// ...........                   
                       
                        //Создаем письмо
                        СпрПисьмо = Справочники.itilprofСообщениеЭлектроннойПочты.СоздатьЭлемент();
                        СпрПисьмо.УчетнаяЗаписьЭлектроннойПочты = ВыборкаУчетныхЗаписей.УчетнаяЗапись;
                        СпрПисьмо.ВходящиеСообщение = Истина;
                        СпрПисьмо.АдресОтправителя  = Письмо.Отправитель.Адрес;
                        СпрПисьмо.Отправитель = Справочники.Пользователи.НайтиПоРеквизиту("ОсновнойEmail",СпрПисьмо.АдресОтправителя);
                        СпрПисьмо.ДатаОтправки = Письмо.ДатаОтправления;
                        СпрПисьмо.ДатаПолучения = Письмо.ДатаПолучения;
                        СпрПисьмо.MessageID = Письмо.ИдентификаторСообщения;
                        СпрПисьмо.Обработано = Истина;
                        СпрПисьмо.Записать();
                       
                    КонецЦикла;
                   
                КонецЕсли;
               
            иначе
                Сообщить("Не удалось получить почту с :"""+ВыборкаУчетныхЗаписей.АдресЭлектроннойПочты+""".");
            КонецЕсли;   
           
        КонецЦикла;   
       
        УстановитьПривилегированныйРежим(Ложь);
       
    КонецПроцедуры
  2. KurganPX
    Offline

    KurganPX Новичок в 1С

    Регистрация:
    6 сен 2010
    Сообщения:
    24
    Симпатии:
    1
    Баллы:
    4
    Что там происходит:
    Код:
     ЗагрузитьСообщения(ВыборкаУчетныхЗаписей.УчетнаяЗапись); 
    Конкретно, где присваивается вот это значение:
    Код:
     Письмо.ИдентификаторСообщения 
    И ещё, куда логи stunnel'а пишутся? в stunnel-log.txt прописывается, что оба письма забраны?
  3. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Вот эта функция
    ЗагрузитьСообщения(ВыборкаУчетныхЗаписей.УчетнаяЗапись)


    Код:
    Функция ЗагрузитьСообщения(УчетнаяЗапись)
       Профиль = СформироватьИнтернетПрофильДляЭлектроннойПочты(УчетнаяЗапись);
       Соединение = Новый ИнтернетПочта;
       Попытка
         Если УчетнаяЗапись.ИспользоватьПротоколIMAPДляПриемаПочты тогда 
           Соединение.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);
         Иначе
           Соединение.Подключиться(Профиль);
         КонецЕсли;
       
       Исключение 
         Сообщить(ОписаниеОшибки());
         Возврат Неопределено;
       КонецПопытки; 
     
       Если УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере Тогда
         УдалятьСообщенияПриВыбореССервера = Ложь;
       Иначе
         УдалятьСообщенияПриВыбореССервера = Истина;
       КонецЕсли;
       НаборПисем = Соединение.Выбрать(УдалятьСообщенияПриВыбореССервера);
       Соединение.Отключиться();
       Возврат НаборПисем;
    КонецФункции

    С помощью функции ЗагрузитьСообщения(ВыборкаУчетныхЗаписей.УчетнаяЗапись) я получаю набор писем. Потом циклом прохожу по набору и получаю сами письма.
    Письмо.ИдентификаторСообщения я получаю от своего MSExchange.
    И письма которые у меня не принимаются в MSExchsnge имеют разные идентификаторы. Смотрели по логам MSExchsnge

    Есть лог stunnel. В конфиге stunnel указано debug = 7 (то есть полное логгирование)
    Хотела уже писать, что ничего там не нашла, перепроверила, иногда попадаются такие строки. Значит все-таки stunnel их теряет...?
    Service [pop3] finished (1 left)
    хотя таких строк за 10 минут набегает порядка 50 штук. А у меня за сегодня всего 7 потерянных писем
  4. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29

    Спасибо за ответ. Я выше ответила на ваши вопросы. Может есть идеи у вас?
  5. KurganPX
    Offline

    KurganPX Новичок в 1С

    Регистрация:
    6 сен 2010
    Сообщения:
    24
    Симпатии:
    1
    Баллы:
    4
    Я правильно понимаю, что вы забираете stunnel'om почту с pop сервера эксченджа, а с самого stunnel забираете как с imap сервера?
  6. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Да, забираю по протоколу pop с почтового сервера, и с stunnel также забираю по протоколу pop.
  7. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Ребята, может есть еще какие-нибудь идеи? Очень надо разобраться...((
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Забирать почту 1с-кой по IMAP/POP?

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