Форум программистов, компьютерный форум, киберфорум C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для H1mera
2 / 2 / 1
Регистрация: 05.11.2016
Сообщений: 32

Запись полученных ответов от SMTP сервера в файл (cURL)

20.05.2020, 13:02. Показов 1336. Ответов 1

Author24 — интернет-сервис помощи студентам
Добрый день.

Столкнулся с такой задачей: хочу реализовать возможность записи диалога с SMTP сервером в отдельный файл с помощью библиотеки libcurl для последующего анализа, но непонятно как это сделать.
Пробую использовать для этого CURLOPT_WRITEFUNCTION и CURLOPT_WRITEDATA, но в файл по какой-то причине ничего не записывается. Хотя в консоли все данные отображаются.

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <curl/curl.h>
 
size_t write_to_file(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}
 
int main(void)
{
  CURLcode res;
  CURL *curl;
  curl_slist *recipients = NULL;
  fileBuf_upload_status file_upload_ctx;
  size_t file_size = 0;
 
  file_upload_ctx.lines_read = 0;
  curl = curl_easy_init();
  file_size = read_file(); // возвращает размер сформированного хэдера сообщения
 
  if(curl)
  {
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.mail.ru:25");
    curl_easy_setopt(curl, CURLOPT_USERNAME, USERNAME);
    curl_easy_setopt(curl, CURLOPT_PASSWORD, PASSWORD);
    curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
    curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=LOGIN");
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM_ADDR);
    recipients = curl_slist_append(recipients, TO_ADDR);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
 
    curl_easy_setopt(curl, CURLOPT_INFILESIZE, file_size);
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, fileBuf_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &file_upload_ctx);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 
    FILE *fd = fopen("D:\\buf.txt", "w");
 
    if(!fd) return 5;
 
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_file);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fd);
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");
    res = curl_easy_perform(curl);
 
    /* check for errors */
    if(res != CURLE_OK)
    {
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
    }
 
    /* cleanup curl stuff */
    curl_easy_cleanup(curl);
  }
 
  return 0;
}
Данный код выполняется успешно, письмо приходит на указанный адрес. Но, как уже было сказано, файл пустой.
Помогите, пожалуйста, разобраться с этой проблемой.

Работаю в Eclipse IDE, g++
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2020, 13:02
Ответы с готовыми решениями:

отослать файл с помощью smtp сервера
Сорри, что я тему так назвал, заскок) Привет, можете помочь, мне надо отослать файл с помощью смтп сервера, что мне надо делать, я...

CURL. Запись куков в файл
Всем привет. Пытаюсь с сайта получить куки (сервер возвращает &quot;удачу&quot; авторизации, всё ок), но проблема, куки не пишутся в файл. Что может...

Считывание элементов матрицы из файла и запись ответов в другой текстовый файл
Помогите пожалуйста написать программу для считывания элементов матрицы размером М х N из файла для вывода на экран, и записи ответа в...

1
 Аватар для H1mera
2 / 2 / 1
Регистрация: 05.11.2016
Сообщений: 32
22.05.2020, 13:56  [ТС]
Проблема решилась путем замены стандартной функции отладки. CURLOPT_WRITEFUNCTION и CURLOPT_WRITEDATA в данном случае не нужны

C++ Скопировано
1
2
3
4
5
curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 
curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.mail.ru:25");
Более подробно здесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2020, 13:56
Помогаю со студенческими работами здесь

Запись полученных имен ключей реестра после 100 строки в текстовый файл
Этот код записывает полученные имена ключей из реестра. Как сделать так, чтобы список имен ключей записывался например после 100 строки в...

Отправить почту SMTP + Curl
Напишите пожалуйста код Curl для отправки письма через SMTP. Не обязательно рабочий (хотя если возможно), главное CURL_SETOPT c заданием...

Обработка zip файлов полученных в резултате запроса cURL
На один из запросов мне вернуло ответ в виде строки с каракулями, сначала в консоли делал вывод, комп пищал как бомба. Потом посмотрел что...

Обработка ответов сервера
Нужно обработать некоторые заголовки высылаемые сервером клиенту, напр., чтобы вместо Not Found(404) сервер говорил то, что мне нужно....

SMTP-сервера
Добрый день, дали задание: Написать программу, реализующую функции SMTP-сервера. В главном окне сервера расположено поле типа memo, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер