Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 1
Регистрация: 28.06.2015
Сообщений: 3
1

SMTP клиент и OpenSSL

28.06.2015, 15:19. Показов 2520. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Мне нужно написать простой SMTP клиент,но я столкнулся с небольшой проблемой.Чтобы "общаться" с SMTP сервером нужно шифровать соединение с помощью OpenSSL.Пожалуйста,подскажите как это можно сделать или хотя бы подкиньте русской документации или книг по этой теме.
Уважительная просьба - не просить меня гуглить.Я три дня гуглил,не помогло.Заранее спасибо.

Добавлено через 1 минуту
Ах да,совсем забыл.Я пытался кое-что набросать,вот код:
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
#include <iostream>
#include <windows.h>
#include <openssl\ssl.h>
#include <openssl\bio.h>
#include <openssl\err.h>
using namespace std;
char outmessage[256];
char inmessage[256];
int x;
        BIO * bio;
    SSL * ssl;
    SSL_CTX * ctx;
DWORD WINAPI Thread(LPVOID)
{
    for(;;)
    {
BIO_read(bio,inmessage,sizeof(inmessage));
if(x==0)
{
    break;
}else if(x<=0)
{
    cout<<"BIO_read failed!"<<endl;
}
    }
    return 0;
}
int main()
{
    SSL_library_init();
    ERR_load_BIO_strings();
    SSL_load_error_strings();
    OpenSSL_add_all_algorithms();
 
    ctx = SSL_CTX_new(SSLv23_client_method());
    bio = BIO_new_ssl_connect(ctx);
    BIO_get_ssl(bio, & ssl);
    SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
    BIO_set_conn_hostname(bio, "94.100.180.160:2525");
 
    if(BIO_do_connect(bio) <= 0)
    {
        cout<<"BIO_do_connect failed!"<<endl;
        BIO_free_all(bio);
        SSL_CTX_free(ctx);
        return NULL;
    }
CreateThread(NULL,NULL,Thread,NULL,NULL,NULL);
while(true)
{
    cin.getline(outmessage,256);
    for(int i=0;i<256;i++)
    {
        if(outmessage[i]==NULL)
        {
            outmessage[i]='\n';
        }
    }
    BIO_write(bio,outmessage,256);
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2015, 15:19
Ответы с готовыми решениями:

SSL SMTP отправка письма - клиент ничего не выводит
Проблема в понимании и, собственно, выполнении программы. // BoostTry.cpp: определяет точку...

Так просто, да не просто smtp клиент.
Вот накидал такой код: #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;winsock.h&quot; #include...

Так просто, да не просто smtp клиент.
Вот накидал такой код: #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;winsock.h&quot; #include...

SIGINT с OpenSSL
Приветствую всех! Натыкаюсь в программе (обычная однопоточная консолька, делащая несколько...

2
21 / 21 / 19
Регистрация: 18.03.2014
Сообщений: 148
04.07.2015, 15:18 2
http://morf.lv/modules.php?name=tutorials&lasit=20

Lamer12345, на этом сайте есть описание алгоритма плюс ссылка на github с исходниками. (только там по английски). Поковырявшись в исходниках можно в принципе разобраться. Только исходный код писался под Qt.

Успехов
1
3 / 3 / 1
Регистрация: 28.06.2015
Сообщений: 3
04.07.2015, 17:40  [ТС] 3
Большое спасибо,но я успел разобраться раньше Как оказалось,всё дело было в адресе, и в потоке(почему-то с циклом for данные не читались).Вот код,если кому надо.
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
#include <iostream>
#include <windows.h>
#include <openssl\ssl.h>
#include <openssl\bio.h>
#include <openssl\err.h>
using namespace std;
int value=1;
char outmessage[256];
char inmessage[256];
int x;
        BIO * bio;
    SSL * ssl;
    SSL_CTX * ctx;
    DWORD WINAPI Thread(LPVOID)
    {
        while(true)
        {
BIO_read(bio,inmessage,sizeof(inmessage));
 if(x<=0)
     {
         cout<<inmessage<<endl;
 }
        }
    }
int main()
{
    SSL_library_init();
    ERR_load_BIO_strings();
    SSL_load_error_strings();
    OpenSSL_add_all_algorithms();
 
    ctx = SSL_CTX_new(SSLv23_client_method());
    bio = BIO_new_ssl_connect(ctx);
    BIO_get_ssl(bio, & ssl);
    SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
    BIO_set_conn_hostname(bio, "smtp.gmail.com:465");
 
    if(BIO_do_connect(bio) <= 0)
    {
        cout<<"BIO_do_connect failed!"<<endl;
        BIO_free_all(bio);
        SSL_CTX_free(ctx);
        return NULL;
    }
    CreateThread(NULL,NULL,Thread,NULL,NULL,NULL);
while(true)
{
   cin.getline(outmessage,256);
    for(int i=0;i<256;i++)
    {
        if(outmessage[i]==NULL)
        {
            outmessage[i]='\r';
            outmessage[i+1]='\n';
            break;
        }
    }
    BIO_write(bio,outmessage,strlen(outmessage));
ZeroMemory(outmessage,sizeof(outmessage));      
}
}
Только тут команды сервера вводятся вручную.
0
04.07.2015, 17:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2015, 17:40
Помогаю со студенческими работами здесь

Установка OpenSSL
Устанавливаю библиотеку OpenSSL по инструкции: &gt; perl Configure VC-WIN64A &gt; ms\do_win64a &gt;...

OpenSsl и bio интерфейс
Начал читать чужой исходник с openssl . Он использует bio , причем кажется еще и в собственной...

libcUrl с OpenSSL на MinGW
Помогите! Никак не могу разобраться с libcUrl с OpenSSL, просто libcUrl компилю без проблем,...

OpenSSL сертификат клиента
Здравствуйте, помогите пожалуйста разобраться с сертификатами. Имеется следующий код, который взят...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru