Форум » [x]Harbour » Почта Mail RU + hb_SendMail + SSL » Ответить

Почта Mail RU + hb_SendMail + SSL

Dima: А что б он был здоров. Получил сегодня месагу [pre2] Вы получили это письмо, т.к. для просмотра почты Mail.Ru используете почтовую программу (Outlook, The Bat! и т.п.). Мы постоянно работаем над улучшением безопасности Почты Mail.Ru. Поэтому в ближайшее время на POP3 и SMTP-серверах останется только безопасная авторизация через протокол SSL http://ru.wikipedia.org/wiki/SSL . В связи с этим вам необходимо внести изменения в настройки ваших почтовых клиентов. Мы уже подготовили для вас подробную инструкцию, которую вы можете найти по адресу https://help.mail.ru/mail-help/mailer/popsmtp Не волнуйтесь, вы успеете изменить настройки — почтовые программы будут работать с текущими настройками ещё в течение месяца. При возникновении каких-либо проблем при настройке, пожалуйста, обращайтесь в Службу поддержки, просто ответив на это письмо, или написав по адресу support@corp.mail.ru. Мы обязательно поможем! [/pre2] Аутглюк я перестроил согласно https://help.mail.ru/mail-help/mailer/moexp Работает. А вот как быть с отправкой почты из Harbour ? Ну порты я сменю а как авторизоваться через SSL ? В hb_SendMail и опции вроде нет такой или я не заметил ?

Ответов - 123, стр: 1 2 3 4 5 6 7 All

alkresin: Dima пишет: А вот как быть с отправкой почты из Harbour ? Ну порты я сменю а как авторизоваться через SSL ? В hb_SendMail и опции вроде нет такой или я не заметил ? Я не изучал внимательно это дело, но у меня создалось впечатление, что надо установить в .t. 20-й параметр - lTls.

Dima: alkresin Понял. Спасибо !

Dima: Попробовал и выпал на ошибку [pre2] Error BASE/1081 Operation not supported: TIPCLIENTPOP:new() Called from TIPCLIENT:NEW(0) Called from TIPCLIENTPOP:NEW(0) Called from HB_SENDMAIL(159) [/pre2] [pre2] IF cPopServer != NIL .AND. lPopAuth BEGIN SEQUENCE oUrl1 := TUrl():New( iif( lTLS, "pop3s://", "pop://" ) + cUser + ":" + cPass + "@" + cPopServer + "/" ) oUrl1:cUserid := StrTran( cUser, "&at;", "@" ) oPop := TIPClientPOP():New( oUrl1, xTrace ) // 159 строка IF oPop:Open() oPop:Close() ELSE lReturn := .F. ENDIF RECOVER lReturn := .F. END SEQUENCE ENDIF [/pre2] Как лечить ?


alkresin: Хмм... Может, это связано с вызовом функции tip_SSL() - она вызывается при инициализации объекта TIPClient - поставьте там что-нибудь, чтобы проверить. Вообще, должна быть подключена библиотека hbssl

Dima: alkresin пишет: Вообще, должна быть подключена библиотека hbssl Да у меня ее не было. Скачал и установил http://slproweb.com/download/Win32OpenSSL-1_0_1f.exe Собрал hbssl вот таким батником [pre2] set path=C:\MinGW\bin\ SET HB_WITH_OPENSSL=C:\OpenSSL-Win32\include c:\hb32mingw\bin\hbmk2 hbssl.hbp [/pre2] Полученные либы перенес в папку LIB с Harbour Стал пересобирать пример прицепив к нему еще и Hbssl.hbc Результат тот же. Что интересно не смог собрать ни один пример из Contrib\hbssl\tests во время сборки вот такая картинка [pre2] c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x38c7): undefined reference to `SSL_get_ciphers' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x38d1): undefined reference to `sk_num' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x38f9): undefined reference to `sk_value' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x39c7): undefined reference to `SSL_get_client_CA_list' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x39d1): undefined reference to `sk_num' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x39f9): undefined reference to `sk_value' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x3ab0): undefined reference to `SSL_load_client_CA_file' c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o):ssl.c:(.text+0x3aba): undefined reference to `sk_num' и в конце C:\MinGW\bin\ld.exe: c:/hb32mingw/lib/win/mingw/libhbssl.a(ssl.o): bad reloc address 0x0 in section `.rdata' [/pre2]

alkresin: А вы переписали в доступное для компилятора/линкера место dll, которые прописаны в hbssl.hbc ?

Dima: alkresin Разобрался , мой косяк. Цеплял hbssl.hbc а его и не было в C:\hb32mingw\contrib\hbssl\hbssl.hbc. Папки такой не было совсем. Переписал из сырцов руками. Кроме того добавил в исходник строку REQUEST __HBEXTERN__HBSSL__ Заработало. Спасибо !!!

Dima: Все бы ни чего но новый прикол. Задача у меня MT , само приложение сжимаю с помощью UPX После того как сделал в нем доработку с HBSSL сжатое приложение не стартует. Вылазит виндовая месага. Ошибка при инициализации приложения (0xc0000005). Для выхода из приложения нажмите кнопку OK Если не сжимать то все нормально да и почта уходит с авторизацией SSL PS UPX 3.91w

Dima: Немного поигрался со сборкой. Если из исходника убрать строку REQUEST __HBEXTERN__HBSSL__ тогда сжатый EXE запускается нормально , но в этом случае почта по SSL уходить не будет. Куда копать не пойму.........

Dima: разобрался. скормил UPX опцию --compress-exports=0

Dima: Вопрос на последок. Отправляю из Harbour мыло без SSL и на это уходит меньше 2-х секунд То же мыло с SSL уходит за 1 минуту 28 секунд Как то можно ускорить отправку с SSL ? Если глянуть лог отправки то видно что тормоз не на самой отправке а на логировании. Как ускорить процесс пока не понял [pre2] 20140205-14:17:37 :INETERRORCODE( <pointer> ) >> 0 << 20140205-14:17:37 :INETRECVLINE( <pointer>, , 512 ) >> 250-8BITMIME << 20140205-14:17:37 :INETERRORCODE( <pointer> ) >> 0 << 20140205-14:17:37 :INETRECVLINE( <pointer>, , 512 ) >> 250 AUTH PLAIN LOGIN << 20140205-14:17:37 :INETERRORCODE( <pointer> ) >> 0 << 20140205-14:19:07 :INETRECVLINE( <pointer>, , 512 ) >> NIL << 20140205-14:19:07 :INETERRORCODE( <pointer> ) >> 0 << 20140205-14:19:07 :INETSENDALL( <pointer>, 12, AUTH LOGIN<cr><lf> ) >> 12 << [/pre2]

Dima: Роем дальше. Таймаут (nTimeOut) у меня стоит 90 000 (90 секунд) Поставил его вместо 20 секунд которые стояли изначально. Сделано это было намеренно так как большие письма не уходили если истекал таймаут (это уже обcуждалось в одной из тем на форуме). При чем без SSL не было ни каких тормозов с отправкой. Если отправлять c SSL то похоже что при авторизации прога тупо выжидает весь nTimeOut , это я проверил поиграв с параметром nTimeOut Где то вроде косячек в Hb_sendmail PS Вопрос. На что влияет nTimeOut ? Если он стоит 10 секунд а мыло будет уходить (так как большое) 30 секунд , мыло уйдет или нет ? Что то я запутался чуть уже

Dima: Проблему решил , при чем сильно глубоко не стал копать и решил все на уровне Hb_sendmail , всего одной строкой. Если кому нужно , пишите. Дам подробности. PS Тестил на мыле размером в 10 метров.

Dima: Странно однако. У меня все работает а у клиента при запуске приложения валит ошибка (0xc015002) Отключил временно в исходнике REQUEST __HBEXTERN__HBSSL__ у него запустилось. Не понял в чем дело ? У кого то было такое ?

PSP: Dima пишет: У меня все работает а у клиента при запуске приложения валит ошибка (0xc015002) Видимо, у клиента винда не обновляется. http://social.msdn.microsoft.com/Forums/vstudio/en-US/5aa569ae-72cb-42ab-abdc-bd455504094f/0xc015002-error-application-failed-to-initialize-properly

Dima: PSP Спасибо но не помогло

Dima: PSP Скачал от сюда http://slproweb.com/products/Win32OpenSSL.html Заработало ;)

Dima: а тормоз при отправке по SSL починил так. До первого DO WHILE .T. есть строка oInmail:nConnTimeout :=nTimeOut В этом случае прога будет тупо выжидать весь nTimeOut при логировании. Заменил эту строку на следующую oInmail:nConnTimeout :=3000

PSP: Dima пишет: Скачал от сюда http://slproweb.com/products/Win32OpenSSL.html Заработало ;) Ну и гуд! :)

Softlog86: Кто-нибудь может указать алгоритм действий для изменения работы для отправки почты по SSL (MAIL.RU) ? HARBOUR 3.2.0dev (r1401211941)

Dima: Softlog86 Так в этой теме ж все вроде разобрано , нет ? А если кратко. 1. Сливаем и ставим пакет http://slproweb.com/download/Win32OpenSSL-1_0_1f.exe 2. Собираем библиотеку HBSSL 3. Меняем порты для отправки(приема почты в проге (базе)) 4. В Hb_sendmail в 20 параметре ставим .T. 5. В проге прописываем REQUEST __HBEXTERN__HBSSL__ , пересобираем и юзаем 6. Если прогу сжимать UPX то нужно юзать опцию --compress-exports=0 ЗЫ Для нормального функционирования проги в общедоступном месте или в папке с прогой нужно сложить две DLL libeay32.dll ssleay32.dll Батничек для сборки HBSSL (Mingw) set path=C:\MinGW\bin\ SET HB_WITH_OPENSSL=C:\OpenSSL-Win32\include c:\hb32mingw\bin\hbmk2 hbssl.hbp

Softlog86: Можно-ли как-то имплементировать указанные DLL в EXEшник ?

Dima: Softlog86 пишет: Можно-ли как-то имплементировать указанные DLL в EXEшник ? Можно и где то была тема. Сам не юзаю такой вариант поэтому сходу и не скажу. Но тема была точно.

Softlog86: Что-то не могу одолеть .... У меня в пакете C:\minigui\Harbour\lib\ уже есть HBSSL.LIB (размер 198144) Я добавил в строку батника сборки моей программы /L hbssl ( добавил к уже существующим другим библиотекам ) call ..\..\..\batch\compile.bat MY_PROGRAM /l Hbmzip /l TIP /l WS2_32 /l calldll /l hbssl Добавил в текст своей программы строчку REQUEST __HBEXTERN__HBSSL__ Запустил пересобрать : линкер выдаёт множество unresolved externals: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_BIO_s_null' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|bio Error: Unresolved external '_BIO_s_file' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|bio .................................................................. .................................................................. Error: Unresolved external '_RAND_add' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|rand Error: Unresolved external '_RAND_status' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|rand Error: Unresolved external '_RAND_event' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|rand Error: Unresolved external '_RAND_screen' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|rand Error: Unresolved external '_SSL_CIPHER_description' referenced from C:\MINIGUI\HARBOUR\LIB\HBSSL.LIB|sslciph Что где недописал ?

Dima: вместо добавления hbssl.lib попробуй hbssl.hbc

Softlog86: Ничего не получается .... Запутался в штопор :( .....

Dima: Softlog86 пишет: /l hbssl.hbc а если так hbssl.hbc

Softlog86: через штатный батник COMPILE.BAT не получается ....

Dima: тогда так путь к hbmk2\hbmk2 bio hbssl.hbc

Softlog86: Теперь почему-то не находит BCC компилятор : hbmk2: Could not detect any supported C compiler in your PATH. Setup one or set -comp= option to one of these values: mingw, msvc, clang, bcc, watcom, icc, pocc, xcc, tcc, mingw64, msvc64, msvcia64, bcc64, iccia64, pocc64 Хотя bcc32.EXE есть в PATH и запускается из любого места .....

Dima: сделай батник (этот для Mingw ) set path=C:\MinGW\bin\ c:\hb32mingw\bin\hbmk2 bio hbssl.hbc

Softlog86: Дима , у меня BCC ....... Может есть готовые библиотеки ? я-бы положил куда следует.....

Dima: Softlog86 пишет: Дима , у меня BCC Ну так пути поправь на свои и все

Softlog86: set path=C:\borland\bcc55\bin\ c:\minigui\herbour\hbmk2 bio hbssl.hbc Всё-равно ругается что не может найти компилятор .....: hbmk2: Could not detect any supported C compiler in your PATH. Setup one or set -comp= option to one of these values: mingw, msvc, clang, bcc, watcom, icc, pocc, xcc, tcc, mingw64, msvc64, msvcia64, bcc64, iccia64, pocc64 PS: вот уж точно 'танцы с бубном'

Dima: Softlog86 пишет: set path=C:\borland\bcc55\bin\ уверен что путь правильный и в конце нет лишних пробелов ?

Softlog86: Уверен . Перепроверил . Путь верный и прописан правильно . Дело видимо в чем-то другом

Dima: Softlog86 пишет: Дело видимо в чем-то другом 1. Русские буквы в пути вместо инглиш 2. Пробел(ы) в конце пути

Softlog86: 200 раз проверил . всё нормально . Запускаться должен HBMK2.EXE ? в C:\BORLAND\BCC55\BIN находится BCC32.EXE и запускается из любого каталога ( значит путь указан верный) BCC32.CFG : -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\psdk" -Ij"c:\Borland\Bcc55\lib;C:\Borland\Bcc55\lib\psdk"

Dima: Softlog86 пишет: Запускаться должен HBMK2.EXE ? ага Softlog86 пишет: c:\minigui\herbour\hbmk2 bio hbssl.hbc если путь верный c:\minigui\herbour\hbmk2 bio hbssl.hbc

Softlog86: это я здесь ручками так написал - в батнике - всё правильно .... :) иначе до HBMK2 и не дошло-бы .....

Softlog86: Пошел по пути наименьшего сопротивления ..... для отправки завёл почту на другом сервере ( mail.com ) . Может в следующем релизе harbour/minigui сделают поддержку SSL ..... ?

Dima: Softlog86 Только что проверил на последнем Minigui C:\minigui\Harbour\bin\hbmk2 bio hbssl.hbc Вот только hbssl.hbc нужно взять из полного комплекта Harbour и все нормик собирается. На всяк случай hbssl.hbc [pre2] # # $Id: hbssl.hbc 18696 2012-11-29 00:04:11Z vszakats $ # description=OpenSSL wrapper (encryption) incpaths=. headers=${hb_name}.ch skip={dos} {!HB_DYNBIND_OPENSSL&!(HB_STATIC_OPENSSL&!hbdyn)}libs=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF} {!HB_DYNBIND_OPENSSL& (HB_STATIC_OPENSSL&!hbdyn)}libs=${_HB_DYNPREF}${hb_name}s${_HB_DYNSUFF} {!HB_DYNBIND_OPENSSL&unix}libs=ssl crypto {!HB_DYNBIND_OPENSSL&os2}libs=libssl_s libcrypto_s {!HB_DYNBIND_OPENSSL&!(HB_STATIC_OPENSSL&!hbdyn)&win}libs=ssleay32 libeay32 {!HB_DYNBIND_OPENSSL& (HB_STATIC_OPENSSL&!hbdyn)&win&!allmingw}libs=ssleay32 libeay32 {!HB_DYNBIND_OPENSSL& (HB_STATIC_OPENSSL&!hbdyn)&allmingw}libs=ssl crypto {!HB_DYNBIND_OPENSSL& (HB_STATIC_OPENSSL&!hbdyn)&allwin}libs=crypt32 [/pre2] PS BIO.PRG /* * $Id: bio.prg 18703 2012-11-29 12:56:43Z vszakats $ */ /* * Copyright 2009 Viktor Szakats (harbour syenar.net) * www - http://harbour-project.org */ #require "hbssl" #include "hbssl.ch" PROCEDURE Main() LOCAL bio SSL_init() ? bio := BIO_new_fd( 1, HB_BIO_NOCLOSE ) ? "BIO_WRITE", BIO_write( bio, "Hello world!" + hb_eol() ) ? "BIO_FLUSH", BIO_flush( bio ) ? "BIO_FREE", BIO_free( bio ) ? bio := BIO_new_file( "bio_test.txt", "a+" ) ? "BIO_WRITE", BIO_write( bio, "Hello world!" + hb_eol() ) ? "BIO_FLUSH", BIO_flush( bio ) ? "BIO_FREE", BIO_free( bio ) RETURN PS2 BCC55

Dima: 43 дня работала прога , почту отправляла и много чего еще. Упала на ровном месте ERROR 2010 SSL_SET_FD , при очередной отправке почты. Как то это лечится ? ps в гугле только это нашел https://groups.google.com/forum/#!msg/harbour-devel/3MBBBwOE1dk/O9ao9vnczRYJ

Andrey: Dima пишет: Для нормального функционирования проги в общедоступном месте или в папке с прогой нужно сложить две DLL libeay32.dll ssleay32.dll Т.е. прога будет работать на любой машине ? Только свой ехе-ник и эти dll ? У меня есть юзера с XP Home/Prof SP2 - будет работать ?

Dima: Andrey пишет: Т.е. прога будет работать на любой машине ? да если стоит нужный SP Andrey пишет: Только свой ехе-ник и эти dll ? да Andrey пишет: У меня есть юзера с XP Home/Prof SP2 - будет работать ? см. 1 ответ В общем должен стоять как минимум этот пакет Visual C++ 2008 Redistributables

Andrey: Dima пишет: В общем должен стоять как минимум этот пакет Visual C++ 2008 Redistributables Как сделать проверку на Харборе, что этот пакет установлен в системе ? Есть ли прямая ссылка на этот пакет чтобы юзер сам его установил ?

Dima: я брал тут http://slproweb.com/products/Win32OpenSSL.html для XP а для 7 все сразу заработало. Как проверить не знаю (возможно какой то ключ в реестре), не надо было. Вообще говоря прога с поддержкой SSL у тебя просто не запустится и свалится с ошибкой если этого пакета нет.

Andrey: Softlog86 пишет: Можно-ли как-то имплементировать указанные DLL в EXEшник ? Можно. Вот рабочий пример Resource_DEMO1bcc.7z , брать здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error

Andrey: Dima А как у тебя отвечает (какой код возврата) если адресата (кому отправляешь) нет ? И когда письмо отправляешь, у тебя программа не подвисает ?

Dima: Andrey Не чекал такой вариант , до сих пор все работает относительно нормально. А что за код возврата у тебя ?

Andrey: Dima пишет: Не чекал такой вариант Попробуй отправить на неправильный адрес. Какой у тебя код возврата будет ? И когда письмо отправляешь, у тебя программа не подвисает ?

Dima: Andrey пишет: Попробуй отправить на неправильный адрес. Какой у тебя код возврата будет ? Hb_sendmail вернул .T. Andrey пишет: И когда письмо отправляешь, у тебя программа не подвисает ? Нет

PSP: hb_sendmail() понятия не имеет, существует ли адрес получателя или нет. Это забота почтового сервера.

Andrey: PSP пишет: hb_sendmail() понятия не имеет, существует ли адрес получателя или нет. Это забота почтового сервера. Да я предполагал это. А как узнать что письмо не ушло адресату (т.е. адрес не тот), есть ли такая возможность ?

Dima: Andrey пишет: А как узнать что письмо не ушло адресату (т.е. адрес не тот), есть ли такая возможность ? ну обычно почтовый сервер в этом случае шлет письмо отправителю с текстом типа бла бла получатель не найден (Host or domain name not found)

Andrey: Dima пишет: ну обычно почтовый сервер в этом случае шлет письмо отправителю с текстом типа бла бла получатель не найден (Host or domain name not found) Да, есть такое ! Уже проверил. Dima пишет: Как проверить не знаю (возможно какой то ключ в реестре), не надо было. Вообще говоря прога с поддержкой SSL у тебя просто не запустится и свалится с ошибкой если этого пакета нет. Вот залет то, при старте проги: Конечно можно регулировать запуск этой проги из своей программы, но не знаю как сделать. Есть исходник на С, который проверяет установлен ли Microsoft Visual C 2008 Redistributable Package (x86). https://gist.github.com/skynetxxx/51bcff47011536bf8626 Но я не знаю как перевести его на Харбор. Помогите пожалуйста кто может ?

Dima: Andrey пишет: Вот залет то, при старте проги: а ты "мял" прогу с помощью UPX ?

Andrey: Dima пишет: а ты "мял" прогу с помощью UPX ? Нет, просто собранная BCC+MiniGui, запускаю XP Prof SP2.

Andrey: Dima а у тебя как прога реагирует если нет Microsoft Visual C 2008 Redistributable Package (x86) ?

Dima: Andrey Падала прога с ошибкой. Надо вспомнить какой. Вот такая ошибка (0xc015002) // в этой теме я писал И по ходу у тебя такая же ;)

PSP: Видимо, .NET Framework еще нужно иметь в системе.

Andrey: PSP пишет: Видимо, .NET Framework еще нужно иметь в системе. Нет, необязательно. А как сделать из exe-ника dll-ку, и чтобы эту dll-ку можно было вызывать из своей программы, которая проверяет наличие 2008 Redistributable Package (x86) ? Какие ключи для сборки из ехе в dll ?

Dima: такой вариант думаю не сработает , так как при запуске твоя прога сразу пытается подгрузить SSL дллки так что до проверки дело и не дойдет. возможно я ошибаюсь.

Andrey: Dima пишет: возможно я ошибаюсь. Делаем загрузчик (обычную программу на Харборе или МиниГуи), она проверяет есть ли 2008 Redistributable Package (x86). Если нет, то выдает предупреждение и ссылку для скачивания/установки. Если есть, то запускаем dll отправки почты (т.е. ехе-ник с SSL превращенный в dll-ку) ! Можно конечно оставить и в виде второго ехе-ника эту отправку почты, но я думаю что это не особо красивое решение, всегда делают только ОДИН ехе-ник. Вот и возник вопрос: Какие ключи нужны в МойПроект.hbp для сборки из ехе в dll ?

Dima: По идее но не факт что сработает , такую проверку можно сделать в INIT Procedure. Дело все в каких то ключах реестра , нужно просто гугл правильно спросить. Проверил. Не сработает. DLL грузятся раньше.

Andrey: Dima пишет: Дело все в каких то ключах реестра , нужно просто гугл правильно спросить. Спрашивал, во всех операционках по разному. Есть исходник на С, который проверяет установлен ли Microsoft Visual C 2008 Redistributable Package (x86). https://gist.github.com/skynetxxx/51bcff47011536bf8626 Но я не знаю как перевести его на Харбор.

Dima: ну смотри процедуру FindPackagesByName , ветка реестра там указана , поиграйся. в реестр руками зайди и глянь чего там живет.

Andrey: Вопросы про hb_SendMail(): 1) Если cFrom и cUser не совпадают ? Можно так отправлять ? 2) Если cPass неправильный, то сообщение все равно уходит. А куда ? 3) Как получить ошибку при неправильных cPass или cUser ? А то письмо успешно отправлено, а куда, фиг его знает.

Dima: Andrey пишет: 1) Если cFrom и cUser не совпадают ? Можно так отправлять ? Попробуй Andrey пишет: 2) Если cPass неправильный, то сообщение все равно уходит. А куда ? Какой то не фиксенный у тебя hb_SendMail() , да была такая ошибка и ее устранили в 2011

Andrey: Dima пишет: Какой то не фиксенный у тебя hb_SendMail() , да была такая ошибка и ее устранили в 2011 А откуда брать фиксенный ? Я брал с поставки текущей (новой) из Харбора. А какое у тебя сообщение происходит, если пароль неправильный ?

Dima: Andrey пишет: А какое у тебя сообщение происходит, если пароль неправильный ? hb_SendMail() вернет .F.

Andrey: Dima пишет: Какой то не фиксенный у тебя hb_SendMail() , да была такая ошибка и ее устранили в 2011 А откуда брать фиксенный ?

Dima: если harbour у тебя шел с minigui то там скорее всего правленный уже. сделай тест с неправильным паролем и глянь что вернет hb_sendmail

Dima: в теме http://clipper.borda.ru/?1-4-0-00000508-000-10001-0-1337333829 есть этот фикс , сравни со своим исходником

Andrey: Dima пишет: если harbour у тебя шел с minigui то там скорее всего правленный уже. сделай тест с неправильным паролем и глянь что вернет hb_sendmail Сделал тест. При неправильном пароле - вернулось .T. ! Письмо тоже пришло на ящик ! Это что фича на спец.порт TLS ?

Dima: Исходник сравнивал в этом месте (о котором я писал)?

Andrey: Dima пишет: Исходник сравнивал в этом месте (о котором я писал)? Да нет исходника. Я взял последний МиниГуи и всё. А как там сделано я и не знаю. Ладно, отправляется и ладно... Но фича интересная, можно от кого угодно слать письма...

Dima: Andrey пишет: Но фича интересная, можно от кого угодно слать письма... я еще потестю но с неверным логин или пасс у меня возвращает .F. завтра отпишу про SSL тру.

Andrey: Сделал программу отправки (2 ехе-ника, 3-dll) в одном ехе-файле. Проверяет установку Microsoft Visual C++ 2008 Redistributable (СПАСИБО ГРИГОРИЮ ), если установлен, то дальше создает 2или3-dll OpenSSL и запускает основной ехе-ник (получается вроде без ошибок). Но блин письма отправляет всегда без ошибок, с какого ящика и пароля не отправляешь, всегда Ок. Может у меня почта (от провайдера) такая ??? Кто может по тестить пару раз хотя бы ? https://cloud.mail.ru/public/357ac8e51990/MiniGUI файл Send1Mail.exe

Dima: Dima пишет: Упала на ровном месте ERROR 2010 SSL_SET_FD , при очередной отправке почты. Как то это лечится ? Вчера у клиента не было инета 4 часа и прога падала при отправке почты с той же ошибкой. Предпринял временную меру , перед отправкой проверяю есть ли инет (Hb_ping сервера www.google.com)

Andrey: Dima пишет: перед отправкой проверяю есть ли инет А я переделал пример Григория - \MiniGUI\SAMPLES\Advanced\INET_CHECKER

Dima: Andrey а я свой наваял ;) [pre2] function HB_PING( URL ) local wRet := .T. local hSocket HB_InetInit() if empty(URL) URL := "www.google.com" endif hSocket := hb_inetCreate(2000) hb_inetConnect( URL,80,hSocket ) if hb_inetErrorCode( hSocket )#0 wret:=.f. endif *? hb_inetErrorDesc( hSocket ) HB_InetCleanup() Return wRet [/pre2] А пример конечно тормозной когда нет инета , видать таймаут большой ждет я про INET_CHECKER , такая задержка просто не приемлема.

Andrey: Dima пишет: А пример конечно тормозной когда нет инета Странно. Он у меня всегда быстро возвращал ответ. Правда я его только у себя тестировал, в других условиях не тестировал.

Dima: Dima пишет: а я свой наваял ;) function HB_PING( URL ) А вот и нежданчик Функция кривая оказалась... Есть VPN (инет) и есть сеть - вернет TRUE // нормально Выключаю VPN (инет), сеть есть - вернет FALSE // нормально Выключаю VPN (инет), выключаю сеть - вернет TRUE // НЕ нормально

Dima: Dima пишет: А вот и нежданчик Лечим его так [pre2] if wret ahost:=HB_INETGETHOSTS( URL ) if ahost==NIL .or. len(ahost)==0 wret:=.f. endif endif [/pre2]

Andrey: Dima пишет: Лечим его так Давай тогда полную рабочую функцию !

Dima: да без проблем. [pre2] function HB_PING( URL ) local wRet := .T. local hSocket local ahost HB_InetInit() if empty(URL) URL := "www.google.com" endif hSocket := hb_inetCreate(2000) hb_inetConnect( URL,80,hSocket ) if hb_inetErrorCode( hSocket )#0 wret:=.f. endif if wret ahost:=HB_INETGETHOSTS( URL ) if ahost==NIL .or. len(ahost)==0 wret:=.f. endif endif HB_InetCleanup() Return wRet [/pre2]

Andrey:

alexandr11: пытаюсь собрать hbssl.lib из hbssl.hbc BCC по подсказкам Dima bio.c вроде собирается, но дальше ошибка hbmk2: error: running c/c++ compiler. -1 и список параметров в чем же дело? может, кто-то подскажет или поделится готовым

Dima: Bio собирал так , для MinGW Батник set path=C:\MinGW\bin\ SET HB_WITH_OPENSSL=C:\OpenSSL-Win32\include c:\hb32mingw\bin\hbmk2 bio.prg -lhbssl.hbc

alexandr11: я никак не соображу error: unresolved external '_OpenSSl_add_all_digests' referenced from ...harbour\lib\hbssl.lib|evpmd ... и таких много ... hbssl.lib|ssl hbssl.lib|bio

Dima: Где лежит hbssl.lib когда собираете bio.prg ? Как собираете пример ?

alexandr11: hbssl.lib уже где только не лежал =) примерно так SET HB_WITH_OPENSSL=C:\OpenSSL-Win32\include c:\minigui2.4\harbour\bin\hbmk2 bio.prg -lhbssl.hbc -comp=bcc получаю hbmk2: error: running c/c++ compiler. -1 bcc32.exe ...параметры, в том числе временный файл...

Dima: судя по всему hbmk2 не видит BCC поэтому уберите -comp=bcc и добавьте в батник set path=C:\MiniGUI2.4\Harbour\bin\

alexandr11: спасибо. теперь unable to open file 'C0X32.obj' hbmk2: error: running linker. 2

Dima: alexandr11 Хотелось бы увидеть весь батник

alexandr11: set path=C:\minigui2.4\harbour\bin\ SET HB_WITH_OPENSSL=C:\OpenSSL-Win32\include c:\minigui2.4\harbour\bin\hbmk2 bio.prg -lhbssl.hbc

Dima: alexandr11 пишет: set path=C:\minigui2.4\harbour\bin\ вот сюда надо прицепить еще путь к BCC что то типа set path=C:\minigui2.4\harbour\bin\;C:\bcc55\bin\ и обратите внимание что бы в конце строки не было лишнего пробела

alexandr11: у меня и компилятор и линкер в harbour\bin и include тоже спасибо за помощь постараюсь сам разобраться

Softlog86: Вроде собралась HBSSL.LIB ... Добавил в программу строчку : REQUEST __HBEXTERN__HBSSL__ Компилирую через HBMK2 : ошибка ! Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN___HBEXTERN__HBSSL__' referenced from C:\TMP\HBMK_C3Q5KN.DIR\PLIST.OBJ hbmk2[PLIST]: Error: Running linker. 2 не могу понять - подключается вновь созданная HBSSL.LIB к проекту или нет .

Dima: дорогу укажи к ...........\contrib\hbssl\hbssl.hbc

Softlog86: у меня HARBOUR из поставки MiniGui - поэтому некоторых каталогов и файлов нет ... Дима , а в каком файле 'дорогу указывать '... ? Попутный вопрос - у меня исходники от HARBOUR 3,0 . Пойдёт ?

Dima: я кормил HBMK2 файлик свой HBP там дорогу и указал Softlog86 пишет: Попутный вопрос - у меня исходники от HARBOUR 3,0 . Пойдёт ? исходники можно и свежие взять

Dima: Softlog86 Разобрался (собрал) ? PS По ходу кусочек из ChangeLog.txt MiniGUI [pre2] * Updated: Harbour Compiler 3.2.0dev (r2014-01-21 20:41): * New: added HbSSL wrapper library and OpenSSL corresponding libraries. [/pre2]

Softlog86: Одно лечим - другое калечим . Собрал . На домашнем компе всё работает - на офисном опять чего-то не хватает .... Я так понял что в пакете HARBOUR 3.2 уже идёт поддержка SSL ....

Dima: все нужные либы (для SSL) есть в составе Минигуи

Dima: Проверенный в бою Microsoft Visual C++ 2005-2008-2010-2012-2013-2015 [04-12-2015] _http://rutracker.org/forum/viewtopic.php?t=4594892 ЗЫ Может пригодится кому.

Andrey: Dima пишет: Проверенный в бою Microsoft Visual C++ 2005-2008-2010-2012-2013-2015 [04-12-2015] А что на нём собирал ?

Dima: Andrey пишет: А что на нём собирал ? Если пакет не установлен , тогда приложение Habrour с использованием SSL во время запуска упадет с ошибкой (0xc015002)

rvu: А что сейчас с почтой из Харбора? Вроде, писали, что возможность есть. А рабочие примеры существуют?

Dima: rvu Бери да пробуй , все параметры этой функции описаны в сырцах

Alex_Cher: Dima пишет: Бери да пробуй , все параметры этой функции описаны в сырцах перерыл все параметры в сырцах по функции hb_SendMail, перекопал весь енет, месяц промучился но отправить почту с yandex на mail так и не получилось ... Запросил помощи в конфе прислать рабочие параметры hb_SendMail, ни одного дельного предложения ... Примерах C:\MiniGUI\SAMPLES нет ни одного рабочего примера ... gfilatov может хоть ты чем поможешь ?

Dima: Alex_Cher Жесть )) [pre2] FUNCTION tip_MailSend( cServer, nPort, cFrom, xTo, xCC, xBCC, cBody, cSubject, ; aFiles, cUser, cPass, cPopServer, nPriority, lRead, ; xTrace, lPopAuth, lNoAuth, nTimeOut, cReplyTo, ; lSSL, cSMTPPass, cCharset, cEncoding, cClientHost ) cServer -> Required. IP or domain name of the mail server nPort -> Optional. Port used my email server cFrom -> Required. Email address of the sender xTo -> Required. Character string or array of email addresses to send the email to xCC -> Optional. Character string or array of email addresses for CC (Carbon Copy) xBCC -> Optional. Character string or array of email addresses for BCC (Blind Carbon Copy) cBody -> Optional. The body message of the email as text, or the filename of the HTML message to send. cSubject -> Optional. Subject of the sending email aFiles -> Optional. Array of attachments to the email to send cUser -> Required. User name for the POP3 server cPass -> Required. Password for cUser cPopServer -> Required. POP3 server name or address nPriority -> Optional. Email priority: 1=High, 3=Normal (Standard), 5=Low lRead -> Optional. If set to .T., a confirmation request is send. Standard setting is .F. xTrace -> Optional. If set to .T., a log file is created (smtp-<n>.log). Standard setting is .F. If a block is passed, it will be called for each log event with the message a string, no param on session close. lPopAuth -> Optional. Do POP3 authentication before sending mail. lNoAuth -> Optional. Disable authentication methods nTimeOut -> Optional. Number os ms to wait default 10000 (10s) cReplyTo -> Optional. lSSL -> Optional. Need SSL at connect time (TLS need this param set to False) cSMTPPass -> Optional. cCharset -> Optional. cEncoding -> Optional. cClientHost -> Optional. Domain name of the SMTP client in the format smtp.example.net OR client IP surrounded by brackets as [127.0.0.1] for IPv4 or as [ipv6:address] (f.e. '[ipv6:::1]') for IPv6 Note: This parameter is optional for backwards compatibility, but should be provided to comply with RFC 2812. [/pre2] На данный момент с yandex и mail надо подключать HBSSL и включать параметр lSSL в TRUE Вопросы есть ?

alkresin: Я отправляю почту из Харборовских приложений при помощи внешних программ. Просто запускаю соответствующую программу с нужными параметрами. Сейчас использую mailsend-go: https://github.com/muquit/mailsend-go. Просто, удобно, не надо ломать голову над деталями реализации SSL в той или иной версии Харбора - там они уже реализованы.

Dima: Лови пример [pre2] proc main local aa:=repl("s",500) local komu:="test@mail.ru" // мыло куда шлем REQUEST __HBEXTERN__HBSSL__ REQUEST HB_CODEPAGE_RU866,HB_CODEPAGE_UTF8 ,HB_CODEPAGE_UTF8EX hb_cdpSelect( "RU866" ) REQUEST HB_LANG_RU HB_LANGSELECT("RU") use inetmy new ? tip_ssl() a:=seconds() if Hb_sendmail(alltrim(inetmy->smtp),; inetmy->port,; alltrim(inetmy->email),; komu, , ,aa,; "Заявка TEST", ,; alltrim(inetmy->elogin),; alltrim(inetmy->epass),alltrim(inetmy->pop3),1,,inetmy->ltrs, , , , ,inetmy->lssl , ,"cp866","base64" ) // inetmy->smtp сервер smtp // inetmy->port порт для SSL 465 или 587 // inetmy->email моё мыло // inetmy->elogin логин к моей почте // inetmy->epass пасс к моей почте //inetmy->ltrs TRUE или FALSE включает/выключает трассировку // inetmy->lssl TRUE включает SSL ? "ok" else ? .f. endif ? seconds()-a wait close all return nil [/pre2]

gfilatov2002: Alex_Cher пишет: отправить почту с yandex на mail так и не получилось Прямо сейчас отправил тестовый пример по этому маршруту. Полный текст примера: [pre2]/* * Copyright 2009 Viktor Szakats (vszakats.net/harbour) * www - http://harbour-project.org */ #require "hbssl" #require "hbtip" REQUEST __HBEXTERN__HBSSL__ #include "simpleio.ch" PROCEDURE Main( cFrom, cPassword, cTo ) IF ! tip_SSL() ? "Error: Requires SSL support" wait RETURN ENDIF hb_default( @cFrom , "hmg@ya.ru" ) hb_default( @cPassword, "MYSECRETPASSWORD" ) hb_default( @cTo , "gfilatov@inbox.ru" ) ? hb_SendMail( ; "smtp.yandex.ru", ; 465, ; cFrom, ; cTo, ; NIL /* CC */, ; {} /* BCC */, ; "It is a test message.", ; "It is a test subject", ; NIL /* attachment */, ; cFrom, ; cPassword, ; "", ; NIL /* nPriority */, ; NIL /* lRead */, ; .T. /* lTrace */, ; .F., ; NIL /* lNoAuth */, ; NIL /* nTimeOut */, ; NIL /* cReplyTo */, ; .T. ) wait RETURN [/pre2] А вот - содержание лог-файла: [pre2]20200813-09:38:42 :INETCONNECT( smtp.yandex.ru, 465 ) >> <pointer> << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 220 sas8-b61c542d7279.qloud-c.yandex.net ESMTP (Want to use Yandex.Mail for your domain? Visit http://pdd.yandex.ru) << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETSENDALL( <pointer>, 20, EHLO TIPClientSMTP<cr><lf> ) >> 20 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-sas8-b61c542d7279.qloud-c.yandex.net << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-8BITMIME << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-PIPELINING << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-SIZE 42991616 << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-AUTH LOGIN PLAIN XOAUTH2 << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250-DSN << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 250 ENHANCEDSTATUSCODES << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETSENDALL( <pointer>, 12, AUTH LOGIN<cr><lf> ) >> 12 << 20200813-09:38:42 :INETRECVLINE( <pointer>, , 512 ) >> 334 VXNlcm5hbWU6 << 20200813-09:38:42 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:42 :INETSENDALL( <pointer>, 14, aG1nQHlhLnJ1<cr><lf> ) >> 14 << 20200813-09:38:43 :INETRECVLINE( <pointer>, , 512 ) >> 334 UGFzc3dvcmQ6 << 20200813-09:38:43 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:43 :INETSENDALL( <pointer>, 14, aG1nM2d1cnU=<cr><lf> ) >> 14 << 20200813-09:38:43 :INETRECVLINE( <pointer>, , 512 ) >> 235 2.7.0 Authentication successful. << 20200813-09:38:43 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:43 :INETSENDALL( <pointer>, 24, MAIL FROM: <hmg@ya.ru><cr><lf> ) >> 24 << 20200813-09:38:43 :INETRECVLINE( <pointer>, , 512 ) >> 250 2.1.0 <hmg@ya.ru> ok << 20200813-09:38:43 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:43 :INETSENDALL( <pointer>, 30, RCPT TO: <gfilatov@inbox.ru><cr><lf> ) >> 30 << 20200813-09:38:44 :INETRECVLINE( <pointer>, , 512 ) >> 250 2.1.5 <gfilatov@inbox.ru> recipient ok << 20200813-09:38:44 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:44 :INETSENDALL( <pointer>, 6, DATA<cr><lf> ) >> 6 << 20200813-09:38:44 :INETRECVLINE( <pointer>, , 512 ) >> 354 Enter mail, end with "." on a line by itself << 20200813-09:38:44 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:44 :INETSENDALL( <pointer>, 582, Date: Thu, 13 Aug 2020 09:38:43 +0300<cr><lf>From: =?UTF-8?Q?hmg=40ya.ru?= <hmg@ya.ru><cr><lf>To: gfilatov@inbox.ru<cr><lf>Subject: =?UTF-8?Q?It=20is=20a=20test=20subject?=<cr><lf>Content-Transfer-Encoding: quoted-printable<cr><lf>Content-Type: text/html; charset=UTF-8<cr><lf><cr><lf><=21DOCTYPE html PUBLIC =22-//W3C//DTD HTML 4.01 Transitional//EN=22 =22h=<cr><lf>ttp://www.w3.org/TR/html4/loose.dtd=22><html><head><title>Test</title></h=<cr><lf>ead><body>Here=C3=86s the new <a href=3D=C3=B6http://ask-leo.com=C3=B6>As=<cr><lf>k Leo=21</a> logo:<br /> <img src=3D=C3=B6https://img.askleomedia.com/ask=<cr><lf>leonew.png=C3=B6 /></body></html><cr><lf> ) >> 582 << 20200813-09:38:44 :INETSENDALL( <pointer>, 5, .<cr><lf> ) >> 5 << 20200813-09:38:45 :INETRECVLINE( <pointer>, , 512 ) >> 250 2.0.0 Ok: queued on sas8-b61c542d7279.qloud-c.yandex.net as 1597300727-aH2bT371Yw-ckHWt2Uf << 20200813-09:38:45 :INETERRORCODE( <pointer> ) >> 0 << 20200813-09:38:45 :INETSENDALL( <pointer>, 6, QUIT<cr><lf> ) >> 6 << 20200813-09:38:45 :INETRECVLINE( <pointer>, , 512 ) >> 221 2.0.0 Closing connection. << 20200813-09:38:45 :INETERRORCODE( <pointer> ) >> 0 << [/pre2]

Softlog86: Доброго всем дня ! Перестала отправляться почта через HB_SENDMAIL .... до этого ШЕСТЬ ЛЕТ всё работало идеально . используется ящик на GMAIL.COM перепробовал для эксперимента и через другие (Yandex-почта и т д ) всё-равно не отправляет . что просто письмо , что с прикрепленным файлом (рассылка остатков склада) К сожалению исходники потеряны (флешку стащили в транспорте) поэтому логи посмотреть не могу . Знать-бы куда рыть ..... почтовый сервис виноват или проблема на моей стороне ? Может что-то с этими грёбаными SSL ..... а я не в курсе изменений . PS: Программу-для рассылки в принципе могу написать заново ....(Clipper/Harbour/MiniGui)

Dima: Softlog86 В курсе. Что mail.ru что GMAIL.COM , иначе чутка работают. Нужно в настройках этой почты разрешить использование сторонних приложений для отправки почты. В частности на mail.ru выдадут персональный пасс под такое приложение а на GMAIL.COM нужно галю поставить в безопасности , но если долго GMAIL.COM почту не юзать то галя снимается на автомате , какой там срок даётся не помню и читать надо. PS Полагаю с яндекс такой же фокус

Softlog86: Что-то не нашел в Gmail где ставить галочку ..... :(

Dima: копай https://support.google.com/a/answer/6260879?hl=ru

Dima: читай там же далее как открыть доступ

Softlog86: Как я понял , нужен аккаунт Google Workspace . Которого у меня нет . И к тому же он платный . Да и решение временное . В уведомлениях Google сказано что и эта "лавочка" скоро закроется для использования доступа из сторонних приложений Или я что-то пропустил ?

Dima: Если вы закрыли доступ к аккаунту для менее защищенных приложений, то можете снова его открыть. Однако мы советуем использовать только те приложения, которые соответствуют нашим стандартам безопасности. А вообще юзай mail.ru если живешь в рф



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