|
v7: Неполадки с Rom-mail.dll | ☑ | ||
---|---|---|---|---|
0
sdemon72
27.10.11
✎
11:52
|
Проблемка в общем-то давняя, одно время вроде бы переставала мучать, а сейчас вот снова обострение.
Использую Rom-mail.dll версия 1.4.1 довольно активно: примерно раз в 10 минут через "Назначенные задания" запускается 1с7, принимает почту, выполняет какие-то дела, отправляет почту и закрывается. Через некоторое время (примерно через месяц) перестает принимать и отправлять почту, при этом после попытки получения, если попытаться принять еще раз - падает 1с7 без каких-либо сообщений об ошибке. Перезагрузка сервера, на котором выполняется сие действо, решает проблему. Может быть можно какую-нибудь службу одну перегрузить? или файлик удалить какой-нибудь? |
|||
1
sdemon72
27.10.11
✎
12:05
|
Вдогонку:
Сервер win2003 standart sp2, 1с7 версия 7.70.025, код, связаный с Rom-mail.dll, следующий: [code] Процедура ПочтаПринять() Протокол("Проверка почтового ящика " + НашЕмайл + "..."); Если НастроитьПочтовыйЯщик(0) = 0 Тогда ФлОшибкиАвтообмен = 1; Возврат; КонецЕсли; Если ПочтовыйЯщик.Подключиться("POP3") = 0 Тогда Протокол("ОШИБКА!!! Не удалось подключится к серверу POP3"); ФлОшибкиАвтообмен = 1; //ПочтовыйЯщик.Отключиться(); Возврат; КонецЕсли; // обработка сообщений ТекстПисьма = СоздатьОбъект("Текст"); СчетчикФайлов = 0; СчетчикЗапросов = 0; ТекКолСообщений = ПочтовыйЯщик.КоличествоСообщений(); Для ТекНомерСообщения = 1 По ТекКолСообщений Цикл Если ПочтовыйЯщик.ПолучитьЗаголовок(ТекНомерСообщения) = 0 Тогда Продолжить; КонецЕсли; // Анализ заголовка письма ТекАдресОтправителя = СокрЛП(Нрег(ПочтовыйЯщик.АдресОтправителя)); ТекИмяОтправителя = СокрЛП(Нрег(ПочтовыйЯщик.ИмяОтправителя)); ТемаПисьма = Врег(СокрЛП(ПочтовыйЯщик.Тема)); ДатаПисьма = Дата(ПочтовыйЯщик.ДатаОтправки); ИдПисьма = ПочтовыйЯщик.IDMessage; Если ПустоеЗначение(ИдПисьма) = 1 Тогда ИдПисьма = "БезИД" + Время1980(); КонецЕсли; Протокол("Анализ письма: '" + Лев(ТемаПисьма, 100) + "' от " + Лев(ТекАдресОтправителя,50) + " (" + ДатаПисьма + ")"); ФлЗапросПринят = 0; // Удаление сообщений "Mail Delivery System" Если Найти(Врег(ТекИмяОтправителя),Врег("Mail Delivery")) <> 0 Тогда ПочтовыйЯщик.ПометитьНаУдаление(ТекНомерСообщения); Протокол("Mail Delivery - помечено на удаление"); Продолжить; КонецЕсли; Если Найти(Врег(ТемаПисьма),Врег("Mail Delivery")) <> 0 Тогда ПочтовыйЯщик.ПометитьНаУдаление(ТекНомерСообщения); Протокол("Mail Delivery - помечено на удаление"); Продолжить; КонецЕсли; // Анализ адреса отправителя Если СписКлиентыЧерный.Принадлежит(ТекАдресОтправителя) <> 0 Тогда ПочтовыйЯщик.ПометитьНаУдаление(ТекНомерСообщения); Протокол("Включено в черный список - помечено на удаление"); Продолжить; КонецЕсли; Если СписКлиенты.Принадлежит(ТекАдресОтправителя) <> 0 Тогда ФлЗапросПринят = 1; Иначе СпрКонтрагенты = СоздатьОбъект("Справочник.Контрагенты"); СпрКонтрагенты.ВыбратьЭлементы(); Пока СпрКонтрагенты.ПолучитьЭлемент() = 1 Цикл Если СпрКонтрагенты.ЭтоГруппа() = 1 Тогда Продолжить; ИначеЕсли Найти(Нрег(СпрКонтрагенты.ЭлПочта),ТекАдресОтправителя) = 0 Тогда Продолжить; КонецЕсли; ФлЗапросПринят = 1; Прервать; КонецЦикла; КонецЕсли; Если ФлЗапросПринят = 0 Тогда Протокол("Неизвестный адрес отправителя!"); // Старые письма удаляем Если ВыбДнейСпам = 0 Тогда Продолжить; КонецЕсли; Если ТекущаяДата() - ДатаПисьма < ВыбДнейСпам Тогда Продолжить; КонецЕсли; ПочтовыйЯщик.ПометитьНаУдаление(ТекНомерСообщения); Протокол("Время хранения письма истекло - помечено на удаление"); Продолжить; КонецЕсли; Если ПочтовыйЯщик.ПолучитьТело(ТекНомерСообщения) = 0 Тогда Протокол("ОШИБКА!!! Не удалось получить тело письма"); ФлОшибкиАвтообмен = 1; Продолжить; КонецЕсли; // Запись тела письма ПрефиксПисьма = ПолучитьПрефиксФайла(ВыбКатПрием); ТекстПисьма.Очистить(); ТекстПисьма.ДобавитьСтроку("From: " + ТекАдресОтправителя); ТекстПисьма.ДобавитьСтроку("Message-Id: " + ИдПисьма); ТекстПисьма.ДобавитьСтроку("Subject: " + ТемаПисьма); Для ТекСтрокаСообщения = 1 По ПочтовыйЯщик.КоличествоСтрок() Цикл ТекстПисьма.ДобавитьСтроку("Text: " + ПочтовыйЯщик.ПолучитьСтроку(ТекСтрокаСообщения)); КонецЦикла; ТекстПисьма.Записать(ВыбКатПрием + ПрефиксПисьма + "message.txt"); Протокол("Письмо сохранено в файл "+ ПрефиксПисьма + "message.txt"); СчетчикЗапросов = СчетчикЗапросов + 1; // Сохранение вложений ТекКолФайлов = ПочтовыйЯщик.КоличествоФайлов(); Для ТекНомерВложения = 1 По ТекКолФайлов Цикл ТекИмяВложения = ПочтовыйЯщик.ПолучитьФайл(ТекНомерВложения); ТекИмяФайла = ПрефиксПисьма + ТекИмяВложения; ПочтовыйЯщик.СохранитьФайл(ТекНомерВложения,ТекИмяФайла); Протокол("Принят файл " + ТекИмяВложения + ", сохранен как " + ТекИмяФайла); СчетчикФайлов = СчетчикФайлов + 1; КонецЦикла; ПочтовыйЯщик.ПометитьНаУдаление(ТекНомерСообщения); КонецЦикла; ПочтовыйЯщик.Отключиться(); Протокол("Получено писем " + ТекКолСообщений + ", сохранено " + СчетчикЗапросов + ", файлов " + СчетчикФайлов); КонецПроцедуры // ПочтаПринять() [/code] [code] //********************************************************* // ПочтаОтправить() // Процедура ПочтаОтправить() // Подготовка ящика на отправку Если НастроитьПочтовыйЯщик(1) = 0 Тогда ФлОшибкиАвтообмен = 1; Возврат; КонецЕсли; //Подготовка списка писем СписОтправить = СоздатьОбъект("СписокЗначений"); ТекФайл = ФС.НайтиПервыйФайл(ВыбКатОтправка + "*.*"); Пока ПустоеЗначение(ТекФайл) = 0 Цикл Если (ТекФайл = ".") или (ТекФайл = "..") Тогда ТекФайл = ФС.НайтиСледующийФайл(); Продолжить; КонецЕсли; ТекИмяФайла = ТекФайл; ТекПрефикс = ВыделитьПрефикс(ТекИмяФайла); Если ПустоеЗначение(ТекПрефикс) = 1 Тогда // Без префикса не отправляем ТекФайл = ФС.НайтиСледующийФайл(); Продолжить; КонецЕсли; СписОтправить.ДобавитьЗначение(ТекФайл,ТекПрефикс); ТекФайл = ФС.НайтиСледующийФайл(); КонецЦикла; Если СписОтправить.РазмерСписка() = 0 Тогда Протокол("Нет писем к отправке"); Возврат; КонецЕсли; // Подготовка ящика на отправку Если ПочтовыйЯщик.Подключиться("Отправка") = 0 Тогда Протокол("ОШИБКА!!! Не удалось подключится к серверу SMTP"); ФлОшибкиАвтообмен = 1; Возврат; КонецЕсли; // Отправка писем ТекстПисьма = СоздатьОбъект("Текст"); СписОтправить.СортироватьПоПредставлению(); ПрефиксПисьма = ""; ТемаПисьма = ""; Емайл = ""; ТекСообщение = ""; ТекФайлы = ""; ТекФайлыПротокол = ""; СчетчикОшибок = 0; СчетчикПисем = 0; Инд = 0; Пока 1=1 Цикл Инд = Инд + 1; // Анализ строки списка Если Инд > СписОтправить.РазмерСписка() Тогда // Список обработан - отправить и прервать ФлОтправить = 2; Иначе ТекПрефикс = ""; СписОтправить.ПолучитьЗначение(Инд,ТекПрефикс); Если ПрефиксПисьма = "" Тогда // первый цикл ФлОтправить = 0; ИначеЕсли ПрефиксПисьма = ТекПрефикс Тогда // Продолжение письма ФлОтправить = 0; Иначе ФлОтправить = 1; // Новое письмо КонецЕсли; КонецЕсли; Если ФлОтправить > 0 Тогда ФлОтправлено = 0; // Отправка письма, сначала проверить заголовок Если ПустоеЗначение(Емайл) = 1 Тогда Протокол("Отправка письма невозможна - не найден файл заголовка: " + ПрефиксПисьма + "message.txt"); Иначе ПочтовыйЯщик.ИмяОтправителя = ИмяПользователя() + " " + ВыбИДБазы; ПочтовыйЯщик.АдресОтправителя = НашЕмайл; ПочтовыйЯщик.АдресПолучателя = Емайл; ПочтовыйЯщик.Тема = ТемаПисьма; ПочтовыйЯщик.Тело = ТекСообщение; ПочтовыйЯщик.Вложения = ТекФайлы; ФлОтправлено = ПочтовыйЯщик.Отправить(); Если ФлОтправлено = 0 Тогда Протокол("ОШИБКА!!! Не удалось отправить почту " + Емайл + " '" + ТемаПисьма + "' '" + ТекФайлы +"'"); ФлОшибкиАвтообмен = 1; СчетчикОшибок = СчетчикОшибок + 1; Иначе Протокол("Отправлено письмо для " + Емайл + " '" + ТемаПисьма + "' '" + ТекФайлы +"'"); СчетчикПисем = СчетчикПисем + 1; КонецЕсли; КонецЕсли; // Переместить отправленные файлы в архив и убрать из ТМП Для Инд1 = 1 По СписОтправить.РазмерСписка() Цикл ТекПрефикс = ""; ТекФайл = СписОтправить.ПолучитьЗначение(Инд1,ТекПрефикс); Если ТекПрефикс <> ПрефиксПисьма Тогда Продолжить; КонецЕсли; Если ФлОтправлено = 1 Тогда ФС.ПереименоватьФайл(ВыбКатОтправка + ТекФайл,ВыбКатОтправка + "ARH\" + ТекФайл,1); Протокол("Файл " + ТекФайл + " перемещен в архив"); КонецЕсли; ВыделитьПрефикс(ТекФайл); // Удалить временный файл Если ФС.СуществуетФайл(КаталогНастроек + "TMP\" +ТекФайл) = 1 Тогда ФС.УдалитьФайл(КаталогНастроек + "TMP\" +ТекФайл); КонецЕсли; КонецЦикла; Если ФлОтправить = 2 Тогда Прервать; КонецЕсли; // Подготовка нового письма ТекстПисьма.Очистить(); ТемаПисьма = ""; Емайл = ""; ТекСообщение = ""; ТекФайлы = ""; ТекФайлыПротокол = ""; КонецЕсли; // Обработка строки списка ТекФайл = СписОтправить.ПолучитьЗначение(Инд,ПрефиксПисьма); ТекИмяФайла = ТекФайл; ВыделитьПрефикс(ТекИмяФайла); Если Нрег(ТекИмяФайла) = "message.txt" Тогда // тело письма // Обработка тела письма ТекстПисьма.Открыть(ВыбКатОтправка + ТекФайл); Для ТекСтрокаПисьма = 1 По ТекстПисьма.КоличествоСтрок() Цикл ТекСтрока = ТекстПисьма.ПолучитьСтроку(ТекСтрокаПисьма); Если Врег(Лев(ТекСтрока,СтрДлина("TO: "))) = "TO: " Тогда Емайл = Сред(ТекСтрока,СтрДлина("TO: ")+1); ИначеЕсли Врег(Лев(ТекСтрока,СтрДлина("SUBJECT: "))) = "SUBJECT: " Тогда ТемаПисьма = Сред(ТекСтрока,СтрДлина("SUBJECT: ") + 1); ИначеЕсли Врег(Лев(ТекСтрока,СтрДлина("TEXT: "))) = "TEXT: " Тогда ТекСообщение = ТекСообщение + Сред(ТекСтрока,СтрДлина("TEXT: ")+1) + РазделительСтрок; КонецЕсли; КонецЦикла; Иначе // Обработка вложений ФС.КопироватьФайл(ВыбКатОтправка + ТекФайл,КаталогНастроек + "TMP\" + ТекИмяФайла,0); Если ПустоеЗначение(ТекФайлы) = 0 Тогда ТекФайлы = ТекФайлы + ";"; ТекФайлыПротокол = ТекФайлыПротокол + ","; КонецЕсли; ТекФайлы = ТекФайлы + КаталогНастроек + "TMP\" +ТекИмяФайла; ТекФайлыПротокол = ТекФайлыПротокол + ТекИмяФайла; КонецЕсли; КонецЦикла; ПочтовыйЯщик.Отключиться(); Протокол("Отправлено писем " + СчетчикПисем + ", ошибок " + СчетчикОшибок); КонецПроцедуры // ПочтаОтправить() [/code] |
|||
2
sdemon72
27.10.11
✎
12:09
|
А, да, ну и ошибка выскакивает на методе "Подключиться". При следующей попытке выполнения метода "Подключиться", вылетает 1с7.
|
|||
3
CODER082
27.10.11
✎
14:38
|
А што пишет в событиях ?
|
|||
4
filh
27.10.11
✎
14:41
|
юзай CDO
|
|||
5
sdemon72
27.10.11
✎
15:16
|
3 ничего не обнаружил. Тихо все как в танке.
|
|||
6
filh
27.10.11
✎
15:23
|
я когда юзал, удалял в реестре запись о роммаил, работала 1 раз, при повторной загрузке был облом.
|
|||
7
sdemon72
27.10.11
✎
15:25
|
6: ну если даст плоды - не проблема каждый раз удалять. Попробую как станет глючить....
|
|||
8
filh
27.10.11
✎
15:26
|
чем CDO не устроил?
|
|||
9
filh
27.10.11
✎
15:26
|
или лень переписывать?
|
|||
10
Mikeware
27.10.11
✎
15:27
|
(9) Да проще тогда уж на DialMail переделать - она постабильнее.
Хотя и с роммэйлом проблем не наблюдал... |
|||
11
sdemon72
27.10.11
✎
15:28
|
[9] конечно лень! Оно уже лет 7 работает - бородищей огромной обросло, а щас на "восьмерку" переходим - там уже не нужно будет.
|
|||
12
ЧеловекДуши
27.10.11
✎
15:29
|
Эта ВК конфликтует с другими ВК, так что какие у тебя еще есть ВК?
|
|||
13
sdemon72
27.10.11
✎
15:30
|
Ощущение такое, что где-то переполняется стек или что-то в этом роде, а при перезагрузке обнуляется. Но где?
|
|||
14
sdemon72
27.10.11
✎
15:31
|
(12) 1с++, v7plus и все вродебы. формекс убрали - пользуем 1с++овский
|
|||
15
oleg rizvanov
27.10.11
✎
15:32
|
Думаю, что (12) прав. Случаи были
|
|||
16
oleg rizvanov
27.10.11
✎
15:34
|
(14) А какой порядок загрузки ВК?
|
|||
17
sdemon72
27.10.11
✎
15:36
|
(15) Думаю что в случае конфликта сбои были бы более стабильными - запускается всегда один и тот же ряд задач
|
|||
18
Mikeware
27.10.11
✎
15:36
|
(15) Пользуясь случаем, благодарю за компоненту. Отработала изрядно долго, лет семь уж пыхтит...
|
|||
19
filh
27.10.11
✎
15:37
|
присоединяюсь, но у меня не взлетела.
|
|||
20
FN
27.10.11
✎
15:41
|
(15) Благодарю за компоненту - часто выручала!
|
|||
21
sdemon72
27.10.11
✎
15:41
|
(16) при старте системы - в глобальном модуле Scanner.dll, затем, при запуске обработки (ее запуск тоже прописан в глобаольнике - привязан к пользователю) - ROM-Mail.dll, затем, во вложенной обработке - 1cpp.dll
|
|||
22
oleg rizvanov
27.10.11
✎
15:46
|
(18,19,20) Спасибо большое.
(21) Возможно стоит попробовать грузить ROM-Mail первой? Как минимум хуже от этого не будет :) |
|||
23
sdemon72
27.10.11
✎
15:52
|
(15) и присоединяюсь к благодарностям тоже :)
|
|||
24
sdemon72
27.10.11
✎
15:54
|
22 А может ли эта компонетна где-то хранить свои временные файлы или еще что-то в этом роде, что очищалось бы только при перезагрузке операционной системы? И название процесса какое у нее - такое же, "rommail"?
|
|||
25
oleg rizvanov
27.10.11
✎
15:55
|
(23) Спасибо большое.
Расскажите потом, помогло или нет |
|||
26
sdemon72
27.10.11
✎
15:56
|
Дело в том, что такая вещь запускается попеременно на нескольких БД, и если начинаются сбои - то возникают для всех баз.
|
|||
27
Mikeware
27.10.11
✎
15:56
|
(22) у меня грузится где-то в конце (или даже в обработках, где требуется)
И работает почти без проблем. Проблема - зависание "наглухо" при чтении почты с файлами определенного типа (вроде, презенташки поверпойнтовские) - еще на этапе получения заголовков. Перешел на диалмэйл - вроде работает. Если надо, могу поднять старые архивы багтрекера, найти на чем висло. |
|||
28
oleg rizvanov
27.10.11
✎
16:05
|
Я уже сталкивался. Когда эта проблема возникает, то она живет в пределах сервера. Думаю, на уровне COM-а. Идей пока нет
|
|||
29
sdemon72
27.10.11
✎
16:06
|
(27) вот и у меня без проблем, не считая вот этой, возникающей раз в месяц а то и реже. Спотыкалась раз в месяц примерно, лечил перезагрузкой оси, потом где-то с год без сбоев работала, а сейчас вот, опять, в прошлом месяце один раз и сегодня тоже.
|
|||
30
oleg rizvanov
27.10.11
✎
16:15
|
Стоит только SP2 без R2?
|
|||
31
sdemon72
27.10.11
✎
16:19
|
(30) 2003 R2 SP2
|
|||
32
sdemon72
27.10.11
✎
16:21
|
(30) А другой сервер - просто 2003 SP2. Глючат оба по очереди
|
|||
33
sdemon72
27.10.11
✎
16:22
|
(30) ой, и да, тот что R2 - enterprise (прошу извинения за сумбурность повествования)
|
|||
34
oleg rizvanov
27.10.11
✎
16:35
|
Хочу помочь, но мне бы хоть за что-то зацепиться...
|
|||
35
ЧеловекДуши
27.10.11
✎
16:37
|
Делать нечего ищи альтернативу ВК, на просторах инета есть вроде парочка бесплатных решений.
Нестоит использовать типовую почту от 1С, там глюки похлеще будут :) |
|||
36
sdemon72
27.10.11
✎
16:49
|
(35), спасибо, но я уж лучше раз в месяц перегружусь
|
|||
37
sdemon72
27.10.11
✎
16:51
|
(34) так а процесс не может подвиснуть? он как называется? и какие вызывает процессы системные или дочерние?
|
|||
38
sdemon72
27.10.11
✎
16:52
|
Да, выход из системы и снова вход не помогает. Только перезагрузка
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |