SMTP-почта с использованием libcurl

Я скомпилировал пример c, который поставляется с libcurl.
Исходный файл smtp-tls.c
Пытался использовать его для отправки почты через gmail, и вот что я получил

  • О подключении() к порту smtp.gmail.com 465 (#0)
  • Попытка 74.125.115.109... * подключена
  • #P2# <блочная цитата> #P3#
  • Пустой ответ от сервера

  • Соединение №0 с хостом smtp.gmail.com осталось нетронутым
  • Сервер ничего не вернул (ни заголовков, ни данных)
  • Закрытие соединения #0

Что я пропустил? Я никак не модифицировал код, кроме ввода переменных. На этом компьютере я могу отправлять и получать почту с помощью Outlook 2003.
ИЗМЕНИТЬ
Пробовал другой порт. Вот результат

  • О подключении() к порту smtp.gmail.com 587 (#0)
  • Попытка 74.125.93.109... * подключена
  • Server auth using Basic with user '[email protected]'

    GET / HTTP/1.1 Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Host: smtp.gmail.com:587 Accept: /

220 mx.google.com ESMTP ew54y2x5of95qdz.12 502 5.5.1 Unrecognized command. ew54y2x5of95qdz.12 * Connection #0 to host smtp.gmail.com left intact * Closing connection #0

ИЗМЕНИТЬ
Главное выглядит так

int main()
{
 CURL *curl;
  CURLcode res;
  struct curl_slist *recipients = NULL;
  struct upload_status upload_ctx;

  upload_ctx.lines_read = 0;

  curl = curl_easy_init();
  if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://gmail.com:587");
    curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
    curl_easy_setopt(curl, CURLOPT_USERNAME, "[email protected]");
    curl_easy_setopt(curl, CURLOPT_PASSWORD, "xxxxxxxx");
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
    recipients = curl_slist_append(recipients, TO);
    recipients = curl_slist_append(recipients, CC);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    res = curl_easy_perform(curl);
    curl_slist_free_all(recipients);
    curl_easy_cleanup(curl);
  }
  return 0;
}


ИЗМЕНИТЬ
Похоже, правильный URL-адрес должен быть smtp://smtp.gmail.com:587
Это продвинуло меня дальше, теперь я получаю

* About to connect() to smtp.gmail.com port 587 (#0)
*   Trying 74.125.45.108... * connected
< 220 mx.google.com ESMTP j26srtuiopnann.7
> EHLO my_computer_name
< 250-mx.google.com at your service, 
< 250-SIZE 35882577
< 250-8BITMIME
< 250-STARTTLS
< 250 ENHANCEDSTATUSCODES
* No known auth mechanisms supported!
> QUIT
< 221 2.0.0 closing connection j26srtuiopnann.7
* Closing connection #0
* Login denied


EDIT
Libcurl не поддерживает SSL


person user841550    schedule 18.10.2011    source источник


Ответы (2)


Первый вывод выглядит так, как будто вы передаете libcurl URL-адрес HTTP.

С вашим отредактированным вопросом проблема теперь превратилась в нечто совершенно другое. Теперь похоже, что у вас, возможно, не включен SSL в вашей встроенной libcurl?

person Daniel Stenberg    schedule 18.10.2011
comment
Вы можете быть правы. Я загрузил источник с поддержкой SSL, но не удосужился настроить OpenSSL, думая, что он уже включен в libcurl. - person user841550; 19.10.2011
comment
Источник тот же, если на *nix он обнаружит библиотеку SSL с помощью configure или если на windows нужно собрать для включения SSL (и указать правильные пути). - person Daniel Stenberg; 20.10.2011

в моей программе была эта ошибка Connect #0 to host smtp.gmail.com left intact failed. Но это работает. Я могу отправить почту через учетную запись gmail. Но я не знаю, в чем причина этой ошибки.

я использую команду curl-config --feature и получаю результат:

SSL
IPv6
libz
IDN
NTLM
NTLM_WB
person sbso_1988    schedule 08.03.2012