Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/32: Рейтинг темы: голосов - 32, средняя оценка - 4.53
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
1

отправка почты с пом ощью curl

31.08.2018, 08:25. Показов 6594. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Проблема такова: нужно реализовать отправку почты из программы. Накопал кучу примеров с curl, но ни одного рабочего, компилятор ругается везде одинаково:
C:\Users\Vladimir\Desktop\с++ 3\mail-1\main.cpp|62|undefined reference to `_imp__curl_easy_init'| (и еще штук двадцать подобных строк)
Попутно возникает проблема с подключением libcurl.lib, он ее не видит или игнорирует, не знаю. Пишет warning в соответствующей #pragma..., может проблема в этом? Перенос библиотеки в папку с проектом результата не дал.
Вот весь код примера для ясности:
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include <string.h>
 
#include "C:\users\Vladimir\Downloads\curl\curl-7.61.0\builds\libcurl-vc17-x86-release-dll-ipv6-sspi-winssl\include\curl\curl.h"
#pragma comment(lib,"C:\users\Vladimir\Downloads\curl\curl-7.61.0\builds\libcurl-vc17-x86-release-dll-ipv6-sspi-winssl\lib\libcurl.lib")
 
#define FROM    "<avazart@yandex.ua>"
#define TO      "<avazart@yandex.ua>"
 
static const char *payload_text[] = {
  "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n",
  "To: " TO "\r\n",
  "From: " FROM "\r\n",
  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
  "Subject: Тема тестового письма.\r\n",
  "\r\n", /* empty line to divide headers from body, see RFC5322 */
  "Содержимое тестового письма.\r\n",
  "\r\n",
   NULL
};
 
struct upload_status
{
  int lines_read;
};
 
static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp)
{
  struct upload_status *upload_ctx = (struct upload_status *)userp;
  const char *data;
 
  if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1))
    {
    return 0;
  }
 
  data = payload_text[upload_ctx->lines_read];
 
  if(data)
    {
    size_t len = strlen(data);
    memcpy(ptr, data, len);
    upload_ctx->lines_read++;
 
    return len;
  }
 
  return 0;
}
 
#define SKIP_PEER_VERIFICATION
#define SKIP_HOSTNAME_VERFICATION
 
int main(void)
{
  CURL *curl;
  CURLcode res = CURLE_OK;
  struct curl_slist *recipients = NULL;
  struct upload_status upload_ctx;
 
  upload_ctx.lines_read = 0;
 
  curl = curl_easy_init();
  if(curl) {
    /* Set username and password */
    curl_easy_setopt(curl, CURLOPT_USERNAME, "avazart@yandex.ua");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "*****");
 
    /* This is the URL for your mailserver. Note the use of smtps:// rather
     * than smtp:// to request a SSL based connection. */
    curl_easy_setopt(curl, CURLOPT_URL, "smtps://smtp.yandex.ru");
    curl_easy_setopt(curl, CURLOPT_PORT, 465);
 
    /* If you want to connect to a site who isn't using a certificate that is
     * signed by one of the certs in the CA bundle you have, you can skip the
     * verification of the server's certificate. This makes the connection
     * A LOT LESS SECURE.
     *
     * If you have a CA cert for the server stored someplace else than in the
     * default bundle, then the CURLOPT_CAPATH option might come handy for
     * you. */
#ifdef SKIP_PEER_VERIFICATION
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
#endif
 
    /* If the site you're connecting to uses a different host name that what
     * they have mentioned in their server certificate's commonName (or
     * subjectAltName) fields, libcurl will refuse to connect. You can skip
     * this check, but this will make the connection less secure. */
#ifdef SKIP_HOSTNAME_VERFICATION
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
#endif
 
    /* Note that this option isn't strictly required, omitting it will result in
     * libcurl sending the MAIL FROM command with empty sender data. All
     * autoresponses should have an empty reverse-path, and should be directed
     * to the address in the reverse-path which triggered them. Otherwise, they
     * could cause an endless loop. See RFC 5321 Section 4.5.5 for more details.
     */
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
 
    /* Add two recipients, in this particular case they correspond to the
     * To: and Cc: addressees in the header, but they could be any kind of
     * recipient. */
    recipients = curl_slist_append(recipients, TO);
 //   recipients = curl_slist_append(recipients, CC);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
 
    /* We're using a callback function to specify the payload (the headers and
     * body of the message). You could just use the CURLOPT_READDATA option to
     * specify a FILE pointer to read from. */
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 
    /* Since the traffic will be encrypted, it is very useful to turn on debug
     * information within libcurl to see what is happening during the
     * transfer */
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 
    /* Send the message */
    res = curl_easy_perform(curl);
 
    /* Check for errors */
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));
 
    /* Free the list of recipients */
    curl_slist_free_all(recipients);
 
    /* Always cleanup */
    curl_easy_cleanup(curl);
  }
 
    getchar();
  return (int)res;
}
если что, он отсюда: http://avazart.zz.mu/2014/10/curl-smtp-send-mail/
Спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2018, 08:25
Ответы с готовыми решениями:

Обработка двумерных массивов с пом ощью подпрограмм
Пусть задана вещественная матрица А(n x n). Упорядочить элементы матрицы по не убыванию значений...

Отправка почты: "необработанное исключение отправки почты в system.Dll"
подскажите - вот пример на C#, но он мне пишет &quot;необработанное исключение отправки почты в...

С пом. директивы absolute, отсортировать по убыванию с пом. одной подпрограммы векторы из 10 и 14 вещественных компонент
Program hz_wache; uses crt; const k=10; l=14; var i:byte; a:array of real; b:array of real;...

Подключение ЖД с пом. SATA, а DVD - привод с пом. IDE
Если подключить к материнке ЖД, на котором будет ОС, с помощью SATA, а DVD-привод подключить с...

17
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 08:28 2
sad_guy, этот код для Visual Studio. А у вас что?
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 08:31  [ТС] 3
C::B, разве это принципиально?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 08:35 4
Лучший ответ Сообщение было отмечено sad_guy как решение

Решение

Цитата Сообщение от sad_guy Посмотреть сообщение
разве это принципиально?
Конечно. Формат библиотек импорта у mingw и vc++ - разный.
У вас даже в пути написано, что curl под VC17 собран.
Во-вторых, #pragma comment - это расширение VC++, которое позволяет линковать библиотеки прямо в коде - другие компиляторы могут такое неподдерживать (mingw не поддерживает).
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 08:38  [ТС] 5
Попробовал в vs, тоже не получается: без stdafx.h - неожиданный конец файла, с ним - не может открыть библиотеку
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 08:44 6
Цитата Сообщение от sad_guy Посмотреть сообщение
Попробовал в vs, тоже не получается: без stdafx.h - неожиданный конец файла, с ним - не может открыть библиотеку
Что такое "не может открыть библиотеку"?
Ошибки компиляции\линковки приводите как они есть, а не в пересказе.
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 08:45  [ТС] 7
fatal error LNK1104: не удается открыть файл
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 09:01 8
Цитата Сообщение от sad_guy Посмотреть сообщение
fatal error LNK1104: не удается открыть файл
Возможно компилируете в режиме x64, а библиотека у вас, очевидно, x86.



_____
Для Mingw есть четыре пути.
Первый (предполагается использование 32-битного mingw или 32-битного режима компиляции (-m32)): делаем для mingw библиотеку импорта (руководство). Подключаем ее в настройках среды (link libraries).
Второй: можно попробовать сразу подключить dll к mingw, если он достаточно новый, то поддерживает direct link.

Третий: можно самому скомпилировать и подключить curl под ту версию mingw, которая установлена.

Четвертый: скачать MSYS2, установить там curl из репозитория. Из командной строки, или предварительно подключив компилятор оттуда к C::B, скомпилировать пример.

Все пути предполагают удаление pragma comment из кода, и приведение в порядок путей для заголовочных файлов curl.
1
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 09:10  [ТС] 9
Может можно настроить vs на другой режим?

Добавлено через 3 минуты
Когда вместо сборки я запустил компиляцию, он начал сборку, провел ее успешно с одним пропуском. Это нормально, так можно оставить?
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 09:10 10
Цитата Сообщение от sad_guy Посмотреть сообщение
Может можно настроить vs на другой режим?
Можно. На у меня нет под рукой ее сейчас, чтобы сделать вам скриншоты

Ну и проверьте сперва, что библиотека все-таки доступна по пути, который у вас указан.
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 09:10  [ТС] 11
Когда вместо сборки я запустил компиляцию, он начал сборку, провел ее успешно с одним пропуском. Это нормально, так можно оставить?
PS нельзя(((
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 09:13 12
Цитата Сообщение от sad_guy Посмотреть сообщение
Это нормально, так можно оставить?
Понятия не имею
Если exe запускается и работает, значит оставляйте
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 09:22  [ТС] 13
Я нашел, где, все было правильно - x86, это про режим сборки
когда запустил отладчик, он указал на прежнюю ошибку, странно что при компиляции она выражается пропуском
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 09:29 14
sad_guy, Вот тут описаны возможные причины данной ошибки.
https://msdn.microsoft.com/ru-... eyw4s.aspx
Проверьте их все и устраните, если они имеют место.
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 09:58  [ТС] 15
Насколько я понял - единственная возможная проблема - переменная среды lib, и решить ее можно только перенеся библиотеку в директорию, созданную vs для библиотек
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.08.2018, 10:06 16
Цитата Сообщение от sad_guy Посмотреть сообщение
переменная среды lib, и решить ее можно только перенеся библиотеку в директорию, созданную vs для библиотек
Лучше просто пропишите путь к библиотеке в настройках проекта (Configuration Properties => Linker => General => Additional Library directories) (и сделайте его покороче - так же удобнее, не ленитесь организовать себе рабочее окружение).
Потом пропишите имя библиотеки в Configuration Properties => Linker => Input => Additional dependencies.
И путь к заголовочным файлам в Configuration Properties => C/C++ => General => Additional Include directories.

А pragma comment из кода удалите. И #include приведите к форме #include <curl/curl.h>.

Пути тщательнее проверяйте.
0
...
4 / 4 / 1
Регистрация: 10.11.2017
Сообщений: 151
31.08.2018, 10:46  [ТС] 17
Заработало!)))

Добавлено через 38 минут
Для работы приложения нужна dll в той же директории. Можно ли это как-нибудь убрать?
0
 Аватар для Kastaneda
5232 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
31.08.2018, 12:43 18
Цитата Сообщение от sad_guy Посмотреть сообщение
Можно ли это как-нибудь убрать?
Закинь ее в %SystemRoot%\system32
0
31.08.2018, 12:43
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2018, 12:43
Помогаю со студенческими работами здесь

Отправка Curl запроса
Подскажите как лучше отправлять в python множество curl запросов? Всё что мне приходит на ум: 1)...

CURL и отправка Cookie
Всем доброго времени суток. Проблема следующего характера: с помощью cURL прохожу авторизацию на...

Отправка get запроса cURL
Необходимо оптравить get запрос и получить JSON #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; ...

Отправка GET запроса средствами CURL
Добрый день! Есть такая проблема: Хочу получить информацию со страницы к примеру:...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru