Red de conocimiento informático - Problemas con los teléfonos móviles - El programa está escrito en Xcode. Después de ejecutarlo, envíeme un correo electrónico para pedir ayuda.

El programa está escrito en Xcode. Después de ejecutarlo, envíeme un correo electrónico para pedir ayuda.

/*

Programa de correo C puro,

El valor predeterminado es el servidor de 163 buzones de correo, que se puede modificar.

De forma predeterminada, debe ingresar manualmente el número de cuenta y la Contraseña,

Cambiar la variable a una constante para iniciar sesión automáticamente en el servidor usando una cuenta fija.

Modificar la cuenta de correo electrónico aceptada para enviar. envía correos electrónicos a la dirección de correo electrónico especificada

Incrustar otro c La función de correo c se puede implementar en el código de idioma

*/

#include windows.hgt;

#include lt; winsock.hgt;

#include lt;assert.hgt;

#include lt;iostreamgt;

#include lt;stringgt;

#include lt;stdio .hgt;

#include lt;ctimegt;

#pragma comentario(lib, "WS2_32 .lib")

usando el espacio de nombres std;

//codificación base64

cadena Base64Encode(LPCTSTR lpszSrc);

//base64 decodificación

string Base64Decode(LPCTSTR lpszSrc);

int main()

{

//1. conéctese al servidor de correo Aquí, use el puerto 25 del servidor de correo de socket

WSADATA Wsa;

p>

//Configure WINSOCK

WSAStartup(0x0101, amp; Wsa);

SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

SOCKADDR_IN sin;

LPHOSTENT lphost = gethostbyname("smtp.163.com "); //Esto también se puede modificar usando el servidor de correo de NetEase

if(lphost)

sin.sin_addr.s_addr = ((LPIN_ADDR)lphost-gt;h_addr)-gt ;s_addr;

else

{

printf("s\n","Error al obtener la dirección");

regresar 1;

}

sin.sin_family = AF_INET;

//Presta atención al puerto de escucha 25 del servidor de correo

sin.sin_port = htons(IPPORT_SMTP);

//Conectar al servidor

if( connect(s, (LPSOCKADDR)&sin, sizeof(sin))==SOCKET_ERROR)

{

printf("s\n","Error de conexión");

devuelve 1;

}

printf("s\n", "Conexión exitosa");

//Recibir el servidor por primera vez Respuesta

char buff[1024];

memset(buff, 0, sizeof(buff));

recv(s,

buff, sizeof(buff), 0);

printf("Servicio dijo: s\n", buff);

/////La conexión anterior se ha completado/ / ///

string szLine="\r\n"; //Equivale a presionar Enter

//2. Ahora estás hablando con el servidor

//Hola servidor

string szHelo = "HELO smtp.163.com" szLine;

printf("Dije: s\n", szHelo.c_str() )

enviar(s, szHelo.c_str(), szHelo.length(),

memset(buff, 0, sizeof(buff));

recv(s, buff, sizeof(buff), 0);

printf("El servicio dijo: s\n", buff);

//Solicitar verificación de usuario contraseña (se requiere codificación)

string szAL = "auth login" szLine; //Enviar comando de verificación

printf("Dije: s\n", szAL.c_str() )

enviar(s, szAL.c_str(), szAL.length(),

memset(buff, 0, sizeof(buff));

recv(s, buff, sizeof(buff), 0);

//printf("Service did: s\n", buff); //El servidor responderá que puede ingresar; el número de cuenta

//Enviar cuenta

string szUser;

coutlt;lt; Base64Decode((LPCTSTR)(buff 4));

cingt; gt; szUser;

szUser = Base64Encode(szUser.c_str()) szLine; //base64 codifica la cuenta de entrada

send(s, szUser.c_str( ) , szUser.length(), 0); //Enviar cuenta

printf("Dije: s\n", szUser.c_str()); , 0, sizeof(buff));

recv(s, buff, sizeof(buff), 0);

// printf("El servicio dijo: s\n", buff ); //El servidor responderá que puede ingresar la contraseña

//Enviar contraseña

string szPsw;

coutlt;lt;Base64Decode(( LPCTSTR)(buff 4));

cingt; szPsw;

szPsw = Base64Encode(szPsw.c_str()) szLine // Codifica en Base64 la contraseña ingresada. >

send(s, szPsw.c_str(), szPsw.length(), 0); //Enviar contraseña

printf("Dije: s\n", szPsw.c_str()

memset(buff, 0, tamaño de (buff));

recv(s, buff, tamaño de (buff),

<);

p>printf("Service did: s\n", buff);

//Luego puedes usar la dirección de correo electrónico con la que iniciaste sesión para enviar correos electrónicos a otras direcciones de correo electrónico

string szFrom, szTo;

coutlt;lt;"from:";//tu propio correo electrónico

cingt;gt;szFrom;

coutlt;lt;" to:" ; //A quién enviar

cingt; gt; szTo;

//Dirección del remitente

cadena From = "correo de: lt; " szFrom "gt;" szLine;

//Dirección del destinatario

string To = "rcpt to:lt;" szTo "gt;" szLine;

//Ahora determina quién envió el correo electrónico a donde

send(s, From.c_str(), From.length(), 0); //from

printf(" I); dijo: s\n", From.c_str());

memset(buff, 0, sizeof(buff));

recv(s, buff, sizeof(buff) ), 0);

printf("El servicio dijo: s\n", buff);

getchar() //Sólo se utiliza para hacer una pausa, presione cualquier letra para continuar

send(s, To.c_str(), To.length(), 0); //to

printf("Dije: s\n", To.c_str( ));

memset(buff, 0, tamaño de (buff));

recv(s, buff, tamaño de (buff),

); printf("Service did: s\n", buff);

getchar();

// Deberías haber leído toda la información. Después de ingresar los datos en el comando, significa ingresar el correo electrónico. El contenido está disponible

send(s, "data\r\n", 6, 0); //El comando DATA se envía

printf(" Dije: s\n"," data");

memset(buff, 0, sizeof(buff));

recv(s, buff, sizeof(buff), 0);

printf("Servicio dijo: s\n", buff);

//La información debajo del correo electrónico se trata como contenido

/ /Encabezado del correo electrónico

string szFrom_in = "from:" szFrom szLine;

string szTo_in = "to:" szTo szLine;

//Fecha de envío

string szDate_in= "Fecha: sábado, 20 de agosto de 2011 13:39:29 0800" szLine; //Aquí escribiré la fecha directamente para mayor comodidad

//Título del correo electrónico

string szSubject_in = "Asunto: Soy el título del correo electrónico" szLine;

//Texto del correo electrónico

string szBody_in = "Soy el cuerpo legendario del correo electrónico" szLine;

cadena szContent = szFrom_in szTo_in

szDate_in szSubject_in;

szContent = szLine; //Agrega una línea en blanco

szContent = szBody_in;

//El formato anterior es el más básico //< / p>

send(s, szContent.c_str(), szContent.length(), 0); //szContent

printf("Dije: s\n", szContent.c_str( )

memset(buff, 0, tamaño de(buff));

// recv(s, buff, tamaño de(buff),

<); p >// printf("El servicio dijo: s\n", buff);

getchar();

//finalizar después de enviar instrucciones

enviar. (s, ".\r\n", 3, 0); //La descripción ha terminado

printf("Dije: s\n", ".");

memset(buff, 0, sizeof(buff));

recv(s, buff, sizeof(buff), 0);

printf("El servicio dijo: s\ n", buff);

getchar();

//Salir de la conexión del servidor

send(s, "quit\r\n", 6 , 0); //Salir

printf("Dije: s\n", "salir");

memset(buff, 0, sizeof(buff)); /p>

p>

recv(s, buff, sizeof(buff), 0);

printf("El servicio dijo: s envió el correo electrónico correctamente\n", buff);

devuelve 0;

}