Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Denno
93 / 95 / 30
Регистрация: 21.10.2012
Сообщений: 319
Завершенные тесты: 3
1

Boost + ssl Отправка почты с gmail.com

21.09.2014, 16:52. Просмотров 1179. Ответов 6
Метки нет (Все метки)

Прога просто висит. Что не так ? ))

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
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
#include <iostream>
 
using namespace boost::asio;
 
int main()
{
    typedef ssl::stream<ip::tcp::socket> ssl_socket;
 
    io_service client;
    char buff[512];
    ssl::context ctx(ssl::context::sslv23);
    ssl_socket sock(client, ctx);
    ip::tcp::resolver resolv(client);
    std::string host = "smtp.gmail.com";
    ip::tcp::resolver::query query(host, "465");
    connect(sock.lowest_layer(), resolv.resolve(query));
 
    // The SSL handshake 
    sock.set_verify_mode(ssl::verify_none);
    sock.set_verify_callback(ssl::rfc2818_verification(host));
    boost::system::error_code ec;
    sock.handshake(ssl_socket::client, ec);
 
    std::string req = "EHLO gmail.com\r\n";
    write(sock, buffer(req.c_str(), req.length()));
 
    while (!ec)
    {
        int bytes = read(sock, buffer(buff), ec);
        std::cout << std::string(buff, bytes);
    }
 
    system("PAUSE");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2014, 16:52
Ответы с готовыми решениями:

Не работает SSL в Boost
Здравствуйте. Пытаюсь написать программу для подключения к серверу. ...

C++ | boost::asio + ssl?
Доброго времени суток! Хотелось бы узнать как подключаться по SSL? int...

Boost отправка GET запросов и получение ответа
Добрый вечер. На C++ нужно сделать возможность отправки GET запросов на сервер...

Отправка email-сообщения на smtp сервер с ssl
Помогите написать программу на c++, отправляющую email сообщение на smtp сервер...

Отправка xml запросов на сервер с использованием ssl сертификатов
Здравсвуйте мне на сервер необходимо отправлять запросы в виде xml. Решил...

6
Убежденный
Ушел с форума
Эксперт С++
16138 / 7285 / 1182
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
21.09.2014, 21:28 2
Скорее всего, сервер не закрывает соединение после отправки данных и
ждет новых сообщений. Т.е. "висит" на строке 31. Данных нет - recv не
возвращает управление, пока они не появятся.
0
Zn
3 / 3 / 0
Регистрация: 26.06.2014
Сообщений: 37
22.09.2014, 12:20 3
Такая же ситуация.

Цитата Сообщение от Убежденный Посмотреть сообщение
Скорее всего, сервер не закрывает соединение после отправки данных и
ждет новых сообщений. Т.е. "висит" на строке 31. Данных нет - recv не
возвращает управление, пока они не появятся.
Получается в самом коде засада ?
0
Убежденный
Ушел с форума
Эксперт С++
16138 / 7285 / 1182
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
22.09.2014, 19:35 4
Никакая это не засада, а нормальное поведение сервера.
Протоколы, которые работают поверх TCP, обычно имеют свои
средства для определения границ сообщений. Например, в HTTP
это Content-Length или пустая строка, аналогичное есть и в
SMTP (см. спецификацию протокола).
0
Avazart
Эксперт С++
7791 / 5691 / 560
Регистрация: 10.12.2010
Сообщений: 25,918
Записей в блоге: 17
22.09.2014, 19:59 5
Цитата Сообщение от Убежденный Посмотреть сообщение
Например, в HTTP
это Content-Length или пустая строка
Ну так тоже хз не всегда есть Content-Length, а вот как раз с почтовыми протоколами все более прозрачно, нужно читать построчно команды передаваемые с сервера.

Добавлено через 3 минуты
Смотри пример сессии https://ru.wikipedia.org/wiki/SMTP#....81.D0.B8.D0.B8

Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
    while (!ec) // читать надо не "бесконечно" а до комбинации символов CLRF  ( "\r\n" ) в ответе сервера.
    {
        int bytes = read(sock, buffer(buff), ec);  
        std::cout << std::string(buff, bytes);
       // Когда строка ответа принята сделать вывод на основе того что сказал нам сервер
    }
 
// После отправить QUIT
// Получить ответ на QUIT
// Закрыть соединение.
1
Zn
3 / 3 / 0
Регистрация: 26.06.2014
Сообщений: 37
01.10.2014, 16:39 6
Цитата Сообщение от Avazart Посмотреть сообщение
Смотри пример сессии
Так непонятно, почему программа висит и нету не какого ответа от сервера ?
0
Avazart
Эксперт С++
7791 / 5691 / 560
Регистрация: 10.12.2010
Сообщений: 25,918
Записей в блоге: 17
01.10.2014, 16:42 7
Сервер все сказал, но ты ждешь большего по чему-то, еще раз повторю читать надо строками, а не "вечно".
0
01.10.2014, 16:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2014, 16:42

Boost начало работы: Undefined reference to `boost::system::generic_category() '
Добрый день Собственно говоря возникла необходимость использовать boost в...

Boost Log - undefined reference to `boost::system::system_category()'
Пытаюсь скомпилировать код из примеров Boost Log:#include...

Использование boost и boost.build с несколькими компиляторами
Здравствуйте! Собрал библиотеку boost и boost.build для двух компиляторов:...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru