Форум » [x]Harbour » Hbtip -> popcli.prg » Ответить

Hbtip -> popcli.prg

Dima: Крайне редко но бывает что при отправке почты вылезает ошибка в Методе GETOK [pre2] METHOD GetOk() CLASS TIPClientPOP LOCAL nLen ::cReply := ::inetRecvLine( ::SocketCon, @nLen, 128 ) IF ::inetErrorCode( ::SocketCon ) != 0 .OR. !( Left( ::cReply, 1 ) == "+" ) RETURN .F. ENDIF RETURN .T. [/pre2] Sendmail упал на строке [pre2] IF HB_ISSTRING( cPopServer ) .AND. lPopAuth BEGIN SEQUENCE WITH __BreakBlock() oUrl1 := TUrl():New( iif( lSSL, "pop3s://", "pop://" ) + cUser + ":" + cPass + "@" + cPopServer + "/" ) oUrl1:cUserid := StrTran( cUser, "&at;", "@" ) oPop := TIPClientPOP():New( oUrl1, xTrace ) RECOVER RETURN .F. END SEQUENCE IF oPop:Open() Вот тут oPop:Close() ELSE RETURN .F. ENDIF ENDIF [/pre2] Падает на строке где живет Left c месагой не верный аргумент в функции Left. Есть у кого идеи как это починить ?

Ответов - 14

PSP: Dima пишет: Есть у кого идеи как это починить ? Проверить, строка ли в ::cReply в этот момент.

Dima: PSP пишет: Проверить, строка ли в ::cReply в этот момент. Попробую.

Dima: Dima пишет: IF ::inetErrorCode( ::SocketCon ) != 0 .OR. !( Left( ::cReply, 1 ) == "+" ) наверное так будет [pre2] IF ::inetErrorCode( ::SocketCon ) != 0 .OR. Hb_isstring(::cReply) .and. !( Left( ::cReply, 1 ) == "+" ) [/pre2] Это кстати 2-ой найденный косяк , первый так же не исправлен в текущем Harbour.


Петр: Dima пишет: Это кстати 2-ой найденный косяк , первый так же не исправлен в текущем Harbour. Пишите разработчикам. Там, наверное, не один "косяк". Вот Klass Engwall в harbour-devel пишет The Write() method of tIPClientSMTP returns the number of bytes sent to the mail server or -1 in case of failure, for example if the sender or receiver email address is rejected. But hb_SendMail() ignores the result and calls Commit() regardless of the Write() result, thus confusing the mail server. And it always returns .T. to the calling code, whether success of failure. Там же (в harbour-devel) найдете патч hb_SendMail Dima пишет: наверное так будет IF ::inetErrorCode( ::SocketCon ) != 0 .OR. Hb_isstring(::cReply) .and. !( Left( ::cReply, 1 ) == "+" ) А какую роль в функции GetOk играет nLen?

Dima: Петр пишет: Там же (в harbour-devel) найдете патч hb_SendMail А это где ? Я брал с этого линка http://github.com/harbour/core/archive/master.zip

Петр: Это переписка разработчиков. Попробуйте скачать harbour от vszakats - он что-то уже пофиксил click here - https://github.com/vszakats/harbour-core/archive/master.zip

Dima: Петр пишет: Попробуйте скачать harbour от vszakats - он что-то уже пофиксил Спасибо. Похоже там и функции переименованы. Идею с GETOK вижу , но это не решит проблему если ::cReply не строка.

Dima: Dima пишет: Похоже там и функции переименованы Сразу не увидел переходник. [pre2] #if defined( HB_LEGACY_LEVEL4 ) FUNCTION hb_SendMail( ... ) RETURN tip_MailSend( ... ) #endif [/pre2] И хр..н теперь поймешь чьи сырцы правильнее ))

Петр: Dima пишет: Идею с GETOK вижу , но это не решит проблему если ::cReply не строка Функция ::inetRecvLine вызывает s_inetRecvPattern и сколько я не смотрел, так и не увидел причины почему ::cReply может быть не строкой

Петр: Dima пишет: И хр..н теперь поймешь чьи сырцы правильнее )) Не правильная постановка вопроса - это ведь git. А название функции.. Библиотека ведь hbtip и класы TIP.., и функции tip.. По этому в чем-то Виктор прав.

Dima: Петр Понятно , но может упасть раз в неделю , раз в 2 месяца , рандомно в общем. Причина ,возможно отвалился инет. Если инет есть то это не вечно как и с электричеством. Но это догадка.

Петр: Попробуйте функцию от Виктора, правильно - не правильно, а все таки на одну проверку больше, вдруг поможет.

Dima: Петр Да так и сделаю если снова упадет после моей правки. Отдельную функцию выдергивать из его сырцов не верно будет , смотрю там сильно отличаются сырцы HBTIP , так что дернуть нужно всю либу.

Dima: Смотрю в сырцах Виктора все уже починили (оперативно однако) ЗЫ Со ссылкой на эту тему.



полная версия страницы