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 p>
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;
}