libcurl: email

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение morkovin »

Дед Пахом писал(а): 31 Октябрь 2020, 12:14 Версия какая? Reset был добавлен для почты в v1.22.
!** libcurl for Clarion v1.44
!** 07.09.2019
!** mikeduglas...
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Ну не знаю, вот код метода:

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

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()
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение 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". Чувствую, что-то не так с протоколами.Но что?
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Давайте весь код, от curl.Init() до curl.Send(), по фрагменту ничего сказать нельзя.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение 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?
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

morkovin писал(а): 03 Ноябрь 2020, 14:25как задать TLS?

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

curl.SetSSLVersion(CURL_SSLVERSION_TLSv1)  !- или другая CURL_SSLVERSION_xxx константа
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение 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
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Вызовите эту функцию как есть, без изменений. Должны получить ошибку "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
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение morkovin »

Дед Пахом писал(а): 03 Ноябрь 2020, 17:15 Должны получить ошибку "Failure when receiving data from the peer".
Да, получил эту ошибку через минуты 2-3
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

morkovin писал(а): 03 Ноябрь 2020, 17:57 Да, получил эту ошибку через минуты 2-3
Странно, у меня моментально всё отрабатывает.
Тем не менее, попробуйте подставить вместо фейковых свои атрибуты Account и From.
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение morkovin »

Дед Пахом писал(а): 03 Ноябрь 2020, 18:11
morkovin писал(а): 03 Ноябрь 2020, 17:57 Да, получил эту ошибку через минуты 2-3
Странно, у меня моментально всё отрабатывает.
Тем не менее, попробуйте подставить вместо фейковых свои атрибуты Account и From.
Попробовал. То же самое - долго висит, а потом та же ошибка
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

Что DebugView говорит?
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение morkovin »

Дед Пахом писал(а): 03 Ноябрь 2020, 18:29 Что DebugView говорит?
Вложения
TYCOON.txt
(6.92 КБ) 180 скачиваний
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

libcurl for Clarion

Сообщение Дед Пахом »

А, он у Вас по протоколу http пытается соединиться. Добавьте вызов curl.SetDefaultProtocol('smtp') после Init(), или поставьте libcurl поновее, там этот вызов зашит в Init().
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

libcurl for Clarion

Сообщение morkovin »

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