Страница 6 из 7

libcurl for Clarion

Добавлено: 31 Октябрь 2020, 12:22
morkovin
Дед Пахом писал(а): 31 Октябрь 2020, 12:14 Версия какая? Reset был добавлен для почты в v1.22.
!** libcurl for Clarion v1.44
!** 07.09.2019
!** mikeduglas...

libcurl for Clarion

Добавлено: 31 Октябрь 2020, 12:27
Дед Пахом
Ну не знаю, вот код метода:

Код: Выделить всё

TCurlMailClass.Reset          PROCEDURE()
  CODE
  SELF.FreeRecipients()
  SELF.FreeAttachments()
  SELF.FreeCustomHeaders()
  
  CLEAR(SELF.mailsubject)
  CLEAR(SELF.mailbody)
  CLEAR(SELF.mailaltbody)

  SELF.bodyContentType = 'text/plain'
  SELF.bodyCharset = 'UTF-8'

  PARENT.Reset()

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 13:19
morkovin
С11, abc
Не могу справиться с TSL
Вот картинка из Outlook
03.11_1.png
В Outlook всё работает.
Вот фрагмент из моей проги

Код: Выделить всё

        OF 'mail.volganet.ru'
            curl.Server('mail.volganet.ru', 587)
            curl.Account(EmailUser, EmailPsw)
            curl.From(EmailFrom)
            curl.AddRecipient('miasoft@mail.ru') ! CLIP(ppp:email)) !to/cc/bcc
            curl.UseSSL(CURLUSESSL_ALL)                           ! <---- ???
            curl.SetSSLVerifyPeer(FALSE)  !curl --insecure    !<---- ???
 
Получаю ошибку " failed writing received data to disk/application". Чувствую, что-то не так с протоколами.Но что?

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 13:37
Дед Пахом
Давайте весь код, от curl.Init() до curl.Send(), по фрагменту ничего сказать нельзя.

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 14:25
morkovin
Использую local extension LibCurl, поэтому Init() без моего участия
а код вот:

Код: Выделить всё

    CASE LOWER(CLIP(EmailServer))
        OF 'smtp.mail.ru'      ! SSL - работает
            curl.Server('smtp.mail.ru', EmailPort)
            curl.Account(EmailUser, EmailPsw)
            curl.From(EmailFrom)
            curl.AddRecipient( CLIP(ppp:email)) !to/cc/bcc
            curl.UseSSL(CURLUSESSL_ALL)
            curl.SetSSLVerifyPeer(FALSE)  !curl --insecure
            	
        OF 'smtp.gmail.com'
            curl.Server('smtp.gmail.com', 587)
            curl.Account(EmailUser, EmailPsw)
            curl.From(EmailFrom)
            curl.AddRecipient( CLIP(ppp:email)) !to/cc/bcc
            curl.UseSSL(CURLUSESSL_ALL)
            curl.SetSSLVerifyPeer(FALSE)  !curl --insecure

        OF 'smtp.yandex.ru'     ! SSL - работает
            curl.Server('smtp.yandex.ru', EmailPort)
            curl.Account(EmailUser, EmailPsw)
            curl.From(EmailFrom)
            curl.AddRecipient( CLIP(ppp:email)) !to/cc/bcc
            curl.UseSSL(CURLUSESSL_ALL)
            curl.SetSSLVerifyPeer(FALSE)  !curl --insecure            
            
        OF 'mail.volganet.ru'     ! TLS - не работает
            curl.Server('mail.volganet.ru', 587)
            curl.Account(EmailUser, EmailPsw)
            curl.From(EmailFrom)
            curl.AddRecipient('mia@mail.ru') ! CLIP(ppp:email)) !to/cc/bcc
            curl.UseSSL(CURLUSESSL_ALL)
            curl.SetSSLVerifyPeer(FALSE)  !curl --insecure
 
    END
    
    Glo:EmailMessageText='Обращение № '& ZVK:ID &'<13,10>'&|
            'Дата: '&format(ZVK:DateZapoln,@d06.) &'<13,10>'&|
            'Тема: '&clip(ZVK:Vid)&'<13,10>'&|
            'Есть температура: '&CHOOSE(ZVK:IsT,'да','нет')&'<13,10>'&|   
            'ФИО: '&clip(ZVK:F)&' '&clip(ZVK:I)&' '&clip(ZVK:O)&'<13,10>'&|
            'Д. рожд.: '&format(ZVK:GodRojd, @D06.) &'<13,10>'&|
            'Город: '&clip(ZVK:City)  &'<13,10>'&| 
            'Район: '&clip(ZVK:Raion)&'<13,10>'&| 
            'Улица: '&clip(ZVK:Street) &'<13,10>'&| 
            'Дом: '&CLIP(ZVK:Dom)  &'<13,10>'&|  
            'кв.: '&CLIP(ZVK:kv)  &'<13,10>'&|
            'ТЕЛ.: '&CLIP(ZVK:Phone)  &'<13,10>'&|    
            'Место работы: '&CLIP(ZVK:Work)  &'<13,10>'&|
            'Доп.сведения: '&CLIP(ZVK:Note)  &'<13,10>'&|    
            'Отправлено: '&format(today(), @d06.)&'  '& format(CLOCK(),@t1)    

  curl.Subject('CALL-центр: Обращение № '&ZVK:ID)
  curl.Body(CLIP(Glo:EmailMessageText))
  curl.AddAttachment(Fname)

  !connection timeout (seconds)
  curl.SetOpt(CURLOPT_CONNECTTIMEOUT, 130)
  res = curl.Send()
как задать TLS?

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 15:58
Дед Пахом
morkovin писал(а): 03 Ноябрь 2020, 14:25как задать TLS?

Код: Выделить всё

curl.SetSSLVersion(CURL_SSLVERSION_TLSv1)  !- или другая CURL_SSLVERSION_xxx константа

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 16:51
morkovin

Код: Выделить всё

CURL_SSLVERSION_TLSv1         EQUATE(1) !/* TLS 1.x */
CURL_SSLVERSION_SSLv2         EQUATE(2)
CURL_SSLVERSION_SSLv3         EQUATE(3)
CURL_SSLVERSION_TLSv1_0       EQUATE(4)
CURL_SSLVERSION_TLSv1_1       EQUATE(5)
CURL_SSLVERSION_TLSv1_2       EQUATE(6)
CURL_SSLVERSION_TLSv1_3       EQUATE(7)
из этих все перебрал. Не работает. Та же ошибка
Может надо это как-то вставить

Код: Выделить всё

CURLOPT_TLSAUTH_USERNAME      EQUATE(204 + CURLOPTTYPE_STRINGPOINT)     !Set a username for authenticated TLS
CURLOPT_TLSAUTH_PASSWORD      EQUATE(205 + CURLOPTTYPE_STRINGPOINT)     !Set a password for authenticated TLS
CURLOPT_TLSAUTH_TYPE          EQUATE(206 + CURLOPTTYPE_STRINGPOINT)     !Set authentication type for authenticated TLS

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 17:15
Дед Пахом
Вызовите эту функцию как есть, без изменений. Должны получить ошибку "Failure when receiving data from the peer".

Код: Выделить всё

Send::Morkovin                PROCEDURE()
curl                            TCurlMailClass
res                             CURLcode
  CODE
  curl.Init()

!  curl.SetDefaultProtocol('smtp')
  curl.Server('mail.volganet.ru', 587)
  curl.Account('md@volganet.ru', '12345')
  curl.From('M.D. <md@volganet.ru>')
  curl.AddRecipient('mia@mail.ru') !to/cc/bcc
  
  curl.UseSSL(CURLUSESSL_ALL)
  curl.SetSSLVersion(CURL_SSLVERSION_TLSv1)

  curl.SetSSLVerifyPeer(FALSE)  !curl --insecure
  curl.SetSSLVerifyHost(FALSE)  !curl --insecure
  
  curl.Subject('TEST')
  curl.Body('TEST')

  res = curl.Send()
  
  IF res = CURLE_OK
    MESSAGE('Email sent', 'SendMail', ICON:Asterisk)
  ELSE
    MESSAGE('Send failed: '& curl.StrError(res), 'SendMail', ICON:Exclamation)
  END

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 17:57
morkovin
Дед Пахом писал(а): 03 Ноябрь 2020, 17:15 Должны получить ошибку "Failure when receiving data from the peer".
Да, получил эту ошибку через минуты 2-3

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 18:11
Дед Пахом
morkovin писал(а): 03 Ноябрь 2020, 17:57 Да, получил эту ошибку через минуты 2-3
Странно, у меня моментально всё отрабатывает.
Тем не менее, попробуйте подставить вместо фейковых свои атрибуты Account и From.

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 18:21
morkovin
Дед Пахом писал(а): 03 Ноябрь 2020, 18:11
morkovin писал(а): 03 Ноябрь 2020, 17:57 Да, получил эту ошибку через минуты 2-3
Странно, у меня моментально всё отрабатывает.
Тем не менее, попробуйте подставить вместо фейковых свои атрибуты Account и From.
Попробовал. То же самое - долго висит, а потом та же ошибка

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 18:29
Дед Пахом
Что DebugView говорит?

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 18:46
morkovin
Дед Пахом писал(а): 03 Ноябрь 2020, 18:29 Что DebugView говорит?

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 18:53
Дед Пахом
А, он у Вас по протоколу http пытается соединиться. Добавьте вызов curl.SetDefaultProtocol('smtp') после Init(), или поставьте libcurl поновее, там этот вызов зашит в Init().

libcurl for Clarion

Добавлено: 03 Ноябрь 2020, 19:11
morkovin
Дед Пахом писал(а): 03 Ноябрь 2020, 18:53 А, он у Вас по протоколу http пытается соединиться. Добавьте вызов curl.SetDefaultProtocol('smtp') после Init()
Ура! Спасибо! Всё заработало! :D