Есть ли способ использовать TLS с sdl_net?

Мне нужно отправить письмо с учетной записью Gmail в C ++. Это письмо будет содержать текст, а также вложения. Сейчас я использую sdl_net для работы с сокетом на нескольких платформах, но мне нужно работать с TLS для отправки электронной почты.
Поэтому мой вопрос заключается в том, есть ли способ сохранить sdl_net для работы с сокетом и одновременно выполнять соединение TLS.

//This function is used to create the log file
int smtpLog(std::fstream* file, std::string* text)
{
int len = text->length();
file->seekg(std::fstream::end);
file->write(text->c_str(), len);
return 0;
}

int send(TCPsocket* socket, const char *message, std::fstream* file)
{
int len = strlen(message);
int result = SDLNet_TCP_Send(*socket, message, len);
std::string error_message("Failed to send message to the server: ");if (result < len)
{
error_message.append(SDLNet_GetError());
smtpLog(file, &error_message);
SDLNet_TCP_Close(*socket);
return 1;
}
smtpLog(file, &std::string("Client: "));
smtpLog(file, &std::string(message));
smtpLog(file, &std::string("\n"));
return 0;
}

int receive(TCPsocket* socket, void* data, std::fstream* file)
{
int result = SDLNet_TCP_Recv(*socket, data, 1024);
if (result <= 0)
{
std::string error_message("There were an error: ");
error_message.append(SDLNet_GetError());
smtpLog(file, &error_message);
return 1;
}
smtpLog(file, &std::string("Server: "));
smtpLog(file, &std::string(reinterpret_cast<char*>(data)));
smtpLog(file, &std::string("\n"));

return 0;
}

//This is the main function
int sendEmail()
{
if(SDLNet_Init() == -1)
{
SDL_Log("SDLNet failed to init: %s", SDLNet_GetError());
return 1;
}

IPaddress address;
TCPsocket socket;
char received_message[1024] = {};
char received_message2[1024] = {};

if (SDLNet_ResolveHost(&address, "smtp.gmail.com", 587) == -1)
{
SDL_Log("Failed to load SDL_Net: %s", SDLNet_GetError());
return 1;
}

if (!(socket = SDLNet_TCP_Open(&address)))
{
SDL_Log("Failed to open TCP: %s", SDLNet_GetError());
return 1;
}
std::fstream* log_file = new std::fstream("log.txt", std::fstream::in | std::fstream::out | std::fstream::app);

//Hello command
send(&socket, "EHLO 192.168.1.1 \r\n", log_file);
receive(&socket, &received_message, log_file);
SDL_Delay(10);
memset(&received_message, 0, 1024);

receive(&socket, &received_message, log_file);
memset(&received_message, 0, 1024);

SDL_Delay(10);
send(&socket, "STARTTLS \r\n", log_file);
receive(&socket, &received_message, log_file);SDLNet_TCP_Close(socket);
log_file->close();
SDLNet_Quit();

delete log_file;
return 0;
}

Вот полученный журнал:

Client: EHLO 192.168.1.1Server: 220 smtp.gmail.com ESMTP y75sm284351wme.27 - gsmtpServer: 250-smtp.gmail.com at your service, [ip-address]

250-SIZE 35882577

250-8BITMIME

250-STARTTLS

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-CHUNKING

250 SMTPUTF8Client: STARTTLSServer: 220 2.0.0 Ready to start TLS

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]