Jest to prosta funkcja mojego autorstwa pozwalająca na wysłanie emaila ( napisana gdyż nie mogłem znaleźć odpowiadającej mi biblioteki/funkcji do c++ )
int SendMail(char* MailFrom, char* MailTo, char* Subject, char* Message, char* Login, char* Password, char* SMTPServer, int SMTPPort)
{
WSAData wsaData;
char chBuffer[4096];
if(WSAStartup(MAKEWORD(2,0), & wsaData ) != 0)
return -1;
SOCKET socClient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN sin;
sin.sin_port = htons(SMTPPort);
sin.sin_addr.s_addr = inet_addr(SMTPServer);
sin.sin_family = AF_INET;
if(connect(socClient, (sockaddr*)&sin, sizeof(sin)) == INVALID_SOCKET)
{
closesocket(socClient);
WSACleanup();
return -1;
}
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "HELO\r\n", strlen("HELO\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
char chTemp[256];
gethostname(chTemp, 255);
wsprintf(chBuffer, "EHLO %s\r\n", chTemp);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Login);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Password);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "MAIL FROM: <%s>\r\n", MailFrom);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "RCPT TO: <%s>\r\n", MailTo);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "DATA\r\n", strlen("DATA\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "From: %s\r\n", MailFrom);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "To: %s\r\n", MailTo);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "Subject: %s\r\n", Subject);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Message);
send(socClient, chBuffer, strlen(chBuffer), 0);
send(socClient, "\r\n.\r\n", strlen("\r\n.\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "QUIT\r\n", strlen("QUIT\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
closesocket(socClient);
WSACleanup();
return 0;
}
Wymagana zaincludowana biblioteka winsock2 oraz
#pragma comment(lib, "Ws2_32.lib") Przykładowy kod:
Spoiler
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
int SendMail(char* MailFrom, char* MailTo, char* Subject, char* Message, char* Login, char* Password, char* SMTPServer, int SMTPPort)
{
WSAData wsaData;
char chBuffer[4096];
if(WSAStartup(MAKEWORD(2,0), & wsaData ) != 0)
return -1;
SOCKET socClient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN sin;
sin.sin_port = htons(SMTPPort);
sin.sin_addr.s_addr = inet_addr(SMTPServer);
sin.sin_family = AF_INET;
if(connect(socClient, (sockaddr*)&sin, sizeof(sin)) == INVALID_SOCKET)
{
closesocket(socClient);
WSACleanup();
return -1;
}
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "HELO\r\n", strlen("HELO\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
char chTemp[256];
gethostname(chTemp, 255);
wsprintf(chBuffer, "EHLO %s\r\n", chTemp);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Login);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Password);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "MAIL FROM: <%s>\r\n", MailFrom);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "RCPT TO: <%s>\r\n", MailTo);
send(socClient, chBuffer, strlen(chBuffer), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "DATA\r\n", strlen("DATA\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
wsprintf(chBuffer, "From: %s\r\n", MailFrom);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "To: %s\r\n", MailTo);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "Subject: %s\r\n", Subject);
send(socClient, chBuffer, strlen(chBuffer), 0);
wsprintf(chBuffer, "%s\r\n", Message);
send(socClient, chBuffer, strlen(chBuffer), 0);
send(socClient, "\r\n.\r\n", strlen("\r\n.\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
send(socClient, "QUIT\r\n", strlen("QUIT\r\n"), 0);
recv(socClient, chBuffer, sizeof(chBuffer), 0);
closesocket(socClient);
WSACleanup();
return 0;
}
int main(void)
{
if(SendMail("[email protected] ", "[email protected] ", "Temat", "To jest testowa wiadomosc", "login_base64", "haslo_base64", "193.17.41.99", 587))
std::cout << "Wiadomosc wyslana poprawnie!" << std::endl;
else
std::cout << "Wystapil blad! Wiadomosci nie dostarczono." << std::endl;
system("pause"); // Dziala tylko na windowsie
return 0;
}