Enviar correo usando el socket C ++

#include <iostream> 
#include <Windows.h> 
#include <winsock.h> 
#include <afirmar.h> 
#include <cadena> 
usando el espacio de nombres estándar; 
#pragma comment (lib, "ws2_32.lib") 
typedef char uint8; 
typedef unsigned long uint32; 


static uint8 alphabet_map [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /"; 
static uint8 reverse_map [] = 
{ 
	 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 
	 255, 255, 255, 255, 255, 255 , 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,  
	 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255 63
	 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 255, 255 255, 
	 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
	 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 
	 255, 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, 255, 255, 255, 255, 255 
}; 
uint32 base64_encode (const uint8 * text, uint32 text_len, uint8 * encode) 
{ 
	uint32 i, j; 
	for (i = 0, j = 0; i + 3 <= text_len; i + = 3) 
	{ 
		encode [j ++] = alphabet_map [text [i] >> 2]; // Elimina los primeros 6 dígitos del primer carácter y encuentra el carácter de resultado correspondiente 
		encode [j ++] = alphabet_map [((text [i] << 4) & 0x30) | (text [i + 1] >> 4)]; // will Combine los últimos 2 dígitos de un carácter con los primeros 4 dígitos del segundo carácter y encuentre la 
		codificación de caracteres correspondiente [j ++] = alphabet_map [((text [i + 1] << 2) & 0x3c) | (text [ i + 2] >> 6)]; // Combina los últimos 4 dígitos del segundo carácter con los primeros 2 dígitos del tercer carácter y encuentra la 
		codificación de caracteres correspondiente [j ++] = alphabet_map [text [i + 2 ] & 0x3f]; // Elimina los últimos 6 dígitos del tercer carácter y encuentra el carácter resultante 
	} 

	if (i <text_len) 
	{ 
		uint32 tail = text_len-i;
		si (cola == 1) 
		{ 
			encode [j ++] = alphabet_map [text [i] >> 2]; 
			encode [ j ++] = alphabet_map [(text [i] << 4) & 0x30]; 
			encode [j ++] = '='; 
			encode [j ++] = '=';
		} 
		else // tail == 2 
		{ 
			encode [j ++] = alphabet_map [text [i] >> 2];
			encode [j ++] = alphabet_map [((text [i] << 4) & 0x30) | (text [i + 1] >> 4)]; 
			encode [j ++] = alphabet_map [(text [i + 1] << 2) & 0x3c]; 
			codificar [j ++] = '='; 
		} 
	} 
	return j; 
} 
uint32 base64_decode (const uint8 * code, uint32 code_len, uint8 * plain) 
{ 
	// afirmar ((code_len & 0x03) == 0) ; // Si su condición devuelve un error, finalice la ejecución del programa. Múltiple de 4. 

	uint32 i, j = 0; 
	uint8 quad [4]; 
	for (i = 0; i <code_len; i + = 4) 
	{ 
		for (uint32 k = 0; k <4; k ++) 
		{
			quad [k] = reverse_map [code [i + k]]; // Agrupando, cada grupo de cuatro se convierte en números decimales en la tabla base64 a su vez 
		} 

		afirmar (quad [0] <64 && quad [1] <64) ; 

		plain [j ++] = (quad [0] << 2) | (quad [1] >> 4); // Elimina los primeros 6 dígitos del primer carácter correspondiente al número decimal de la tabla base64 y el segundo carácter correspondiente a la base64 Los primeros dos dígitos del número decimal de la tabla se combinan 

		si (quad [2]> = 64) se 
			rompe; de ​​lo 
		contrario, si (quad [3]> = 64) 
		{ 
			plain [j ++] = (quad [1] << 4) | ( quad [2] >> 2); // Elimina los últimos 4 dígitos de la tabla base64 correspondiente al segundo carácter y los primeros 4 dígitos de la tabla base64 correspondiente al tercer carácter a 
			dividir; 
		} 
		else 
		{ 
			plain [ j ++] = (quad [1] << 4) | (quad [2] >> 2); 
			simple [j ++] = (quad [2] << 6) | quad [3]; // Elimina el tercer carácter Los dos últimos dígitos del número decimal correspondiente a la tabla base64 se combinan con el cuarto carácter 
		} 
	} 
	return j;
} 

char * base64 (char * input) {

	uint8 * text = (uint8 *) entrada;  
	uint32 text_len = (uint32) strlen (( char *) text); 
	uint8 buffer [1024],tampón2 [4096];
	uint32 size = base64_encode (text, text_len, buffer2); 
	
	buffer2 [tamaño] = '\ 0'; 
	return buffer2; 
} // 改变 编码



SOCKET connect_server (char * host, int port); // 连接 服务器
void desconect (SOCKET c) {// 断开
	closesocket (c); 
	WSACleanup (); 
} 
void recv_ms (SOCKET c) { 
	char text [2000]; 
	strnset (texto, 0, sizeof (texto)); 
	recv (c, texto, 2000, 0); 
	cout << texto << endl << endl; 
} 
void send_ms (SOCKET c, char * msg) { 
	send (c, msg, strlen (msg), 0); 
} 

correo electrónico de char [200], pas [200]; 

int main () { 

	host host [] = "smtp.qq.com"; 
	char * pstr = NULL; 
	int puerto = 25; 
	ENCHUFE c;
	// establece la conexión 
	c = connect_server (host, puerto); 
	// recibe el mensaje 
	recv_ms (c); 
	// envía el mensaje hello 
	send_ms (c, (char *) "helo qq \ r \ n \ 0"); 
	// Informar inicio de sesión 
	recv_ms (c); 

	send_ms (c, (char *) "auth login \ r \ n \ 0"); 
	
	recv_ms (c); 

	// iniciar sesión 
	
	cout << "ingresar buzón \ n"; 
	cin >> correo electrónico ; 
	
	// rcpt a: <[email protected]> 
	char buf [200]; 
	char * a = base64 (correo electrónico); 
	strcat (a, "\ r \ n \ 0"); 
	send_ms (c, a); 
	recv_ms (c); 

	send_ms (c, (char *) "abc \ r \ n \ 0"); // abc significa cifrado en base64 del código de autorización 
	recv_ms (c); // código de autorización 



	memset (buf, 0, sizeof (buf )); 
	sprintf (buf, "correo de: <% s> \ r \ n \ 0", correo electrónico);
	send_ms (c, buf);
	desconectar (c); 
	devuelve 0; 
}

	



	


SOCKET connect_server (char * host, int port) { 
	WSADATA wd; 
	ENCHUFE c; 
	SOCKADDR_IN saddr; 
	estructura hostent * pHostent; 
	int ret = 0; 
	ret = WSAStartup (MAKEWORD (2, 2), & wd); 
	if (ret! = 0) devuelve 0; 
	c = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); 

	pHostent = gethostbyname (host); 

	saddr.sin_addr.S_un.S_addr = * ((unsigned long *) pHostent-> h_addr_list [0]); // 地址

	saddr.sin_family = AF_INET; // ipv4 
	saddr.sin_port = htons (puerto); // 端口
	connect ( c, (SOCKADDR *) y saddr, sizeof (SOCKADDR)); 
	volver c; 
} 

//[email protected] 
//[email protected]

 Acabo de aprender que, según el hermano mayor, se llama principalmente la biblioteca, que es importante para comprender la red informática

Supongo que te gusta

Origin www.cnblogs.com/lesning/p/12757988.html
Recomendado
Clasificación