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

libcurl: email

Добавлено: 17 Ноябрь 2016, 23:09
Игорь Столяров
Подскажите пожалуйста: имею желание отправить несколько отдельных писем разным получателям с разными файлами.
Тема и текст письма легко меняется, а как очистить список получателей и файлов ?
Хотел сделать, вот так:

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

   Curl.MailTo.Free()
   Free(Curl.Attachments)
но это закрытые (PRIVATE) данные, да и не уверен я что так правильно ... :( Скорее всего, я чего-то не понимаю.
Есть ли какой-нибудь сброс данных текущего сообщения ? Не инициализировать же каждый раз класс заново ... :(

Заранее спасибо !

libcurl for Clarion

Добавлено: 17 Ноябрь 2016, 23:31
Дед Пахом
Сброс не предусмотрен. Проще всего написать процедуру отправки письма, которую вызывать в цикле. Типа

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

SendMail procedure(server, port, user, pwd, body, attachments...)
curl  TCurlMailClass
  code
  curl.Init()
  curl.Server(server, port)
  !... 
  curl.Send()

libcurl for Clarion

Добавлено: 17 Ноябрь 2016, 23:47
Игорь Столяров
Спасибо, сейчас попробую ...
Я делал вот так и не получилось:

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

code
  Loop ! По списку получателей
    curl.Init()
    curl.Server(server, port)
    !... 
    curl.Send()
  end
А вообще можно как-то реинициализировать Curl ? Curl.Kill() - не получилось ...

libcurl for Clarion

Добавлено: 17 Ноябрь 2016, 23:50
Дед Пахом
Игорь Столяров писал(а): А вообще можно как-то реинициализировать Curl ? Curl.Kill() - не получилось ...
Ну разве что объявить curl как ссылку &TCurlMailClass и делать NEW в начале цикла, DISPOSE в конце.

libcurl for Clarion

Добавлено: 17 Ноябрь 2016, 23:59
Игорь Столяров
Прекрасно работают оба способа (через отдельную процедуру и ссылку).
Мне вариант со ссылкой как-то понятней и есть гарантия, что память возвращена, а не подвисла где-то в закромах cURL ... :)

Большое спасибо за помощь ! :)

libcurl for Clarion

Добавлено: 20 Ноябрь 2016, 0:40
Игорь Столяров
Дед Пахом писал(а): Обновление v1.06 Возможное "Вложение без имени.txt"
Беда с вложением файлов с русскими именами .... :(
Файл нормально присоединяется и приходит в письме, но все русские буквы в имени - кракозябрами ...

libcurl for Clarion

Добавлено: 20 Ноябрь 2016, 1:06
Дед Пахом
curl.Charset('win1251'), curl.AddAttachment(......., 'win1251') по идее должны помочь.

libcurl for Clarion

Добавлено: 20 Ноябрь 2016, 7:45
Игорь Столяров
Дед Пахом писал(а): curl.AddAttachment(......., 'win1251')
Спасибо за наводку ! :) Действительно, вот такой вариант решает проблему с русскими именами файлов в сообщении:

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

MyCurl.AddAttachment('c:\Любить по русски.doc',,'Windows-1251')
Кстати, еще одно "открытие" (для меня) при работе с почтой через LibCur (сURL) - к имени хоста лучше
ВСЕГДА приклеивать протокол, тогда работает везде и без проблем. Что-то вроде:

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

  If SSL = True Or Port = 465
     Host = 'smtps://' & Clip(Host)
     MyCurl.UseSSL(CURLUSESSL_ALL)
  else
     Host = 'smtp://'  & Clip(Host)
  end
  MyCurl.Server(Host,Port)
  .....

libcurl for Clarion

Добавлено: 24 Ноябрь 2016, 18:27
Игорь Столяров
Добрый день !

Вопросик имею спросить. :)
А можно (как-то) в TCurlMailClass включать запрос на уведомление о прочтении отправляемого e-mail ?

Заранее спасибо !

libcurl for Clarion

Добавлено: 26 Ноябрь 2016, 17:13
Дед Пахом
Игорь Столяров писал(а): А можно (как-то) в TCurlMailClass включать запрос на уведомление о прочтении отправляемого e-mail ?
Если это возможно сделать через curl, то почти наверняка возможно и через libcurl. Но я что-то не могу найти в интернете способ.

libcurl for Clarion

Добавлено: 26 Ноябрь 2016, 17:35
Admin
Добавить в письмо, в заголовок две строки:

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

X-Confirm-Reading-To: mixer@clarionlife.net 
Disposition-Notification-To: mixer@clarionlife.net
Уведомления:
о прочтении
и о доставке

libcurl for Clarion

Добавлено: 26 Ноябрь 2016, 17:36
Игорь Столяров
С теорией я вроде разобрался. cURL здесь не причем.
Нужна управляемая вставка в метод создания заголовка сообщения, что-то вроде:

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

TCurlMailClass.CreateHeader ...
   ...
   If Self.Notice then Mail.AddLine('Disposition-Notification-To: ' & CLIP(SELF.mailfrom)).
Ну и конечно, проверить ... ;)

libcurl for Clarion

Добавлено: 26 Ноябрь 2016, 17:58
Дед Пахом
а, точно, подзабыл уже, как письмо формируется. Добавлю на днях оба уведомления.

libcurl for Clarion

Добавлено: 28 Ноябрь 2016, 12:51
Дед Пахом
Admin писал(а): Добавить в письмо, в заголовок две строки:

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

X-Confirm-Reading-To: mixer@clarionlife.net 
Disposition-Notification-To: mixer@clarionlife.net
Уведомления:
о прочтении
и о доставке
Интересно получается... Я пользуюсь 2мя провайдерами - yandex и gmail. Через libcurl ни один из них не реагирует ни на Disposition-Notification-To, ни на X-Confirm-Reading-To, ни на признанный устаревшим Return-Receipt-To. Вобщем-то ничего странного, в спецификации написано, что провайдер вправе полностью игнорировать эти строки.
Далее. С гугла послать письмо с уведомлением нельзя (можно с установленной платной приблудой). С яндекса можно, и уведомление приходит, но в заголовке письма ни Disposition-Notification-To, ни X-Confirm-Reading-To, ни Return-Receipt-To нет.

libcurl for Clarion

Добавлено: 28 Ноябрь 2016, 12:56
Игорь Столяров
Дед Пахом писал(а): С гугла послать письмо с уведомлением нельзя
Значит это уже отмирающий рудимент SMTP .... :(