- El Protocolo de Acceso a Mensajes de Internet (IMAP) permite que los clientes de correo electrónico accedan y gestionen correos almacenados en un servidor.
- Para qué sirve: Permite sincronizar correos electrónicos entre múltiples dispositivos, ya que los mensajes se mantienen en el servidor en lugar de descargarse localmente.
Ejemplo de IMAP: Cliente básico
Este ejemplo se conecta a un servidor IMAP, autentica al usuario y lista las carpetas disponibles en el buzón. Sigue los principios definidos por los estándares IMAP de la IETF (RFC 3501).
Código: Cliente IMAP
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define SERVER_IP "imap.example.com" // IP o dominio del servidor IMAP
#define SERVER_PORT 143 // Puerto estándar para IMAP sin SSL
#define BUFFER_SIZE 1024
void send_command(int sockfd, const char *command, char *response);
int main() {
int sockfd;
struct sockaddr_in server_addr;
char buffer[BUFFER_SIZE];
char response[BUFFER_SIZE];
// Crear socket
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("Error al crear socket");
exit(EXIT_FAILURE);
}
// Configurar la dirección del servidor
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {
perror("Dirección IP inválida");
close(sockfd);
exit(EXIT_FAILURE);
}
// Conectar al servidor
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("Error al conectar al servidor");
close(sockfd);
exit(EXIT_FAILURE);
}
// Leer el mensaje de bienvenida del servidor
read(sockfd, response, BUFFER_SIZE);
printf("Servidor: %s\n", response);
// Autenticarse usando LOGIN
send_command(sockfd, "1 LOGIN usuario contraseña\r\n", response);
printf("Respuesta LOGIN: %s\n", response);
// Listar carpetas del buzón
send_command(sockfd, "2 LIST \"\" \"*\"\r\n", response);
printf("Carpetas: %s\n", response);
// Cerrar la sesión
send_command(sockfd, "3 LOGOUT\r\n", response);
printf("Respuesta LOGOUT: %s\n", response);
// Cerrar el socket
close(sockfd);
return 0;
}
void send_command(int sockfd, const char *command, char *response) {
// Enviar comando al servidor
write(sockfd, command, strlen(command));
// Leer la respuesta del servidor
memset(response, 0, BUFFER_SIZE);
read(sockfd, response, BUFFER_SIZE);
}
Explicación:
- Autenticación con
LOGIN: El cliente envía credenciales al servidor. IMAP soporta métodos más seguros como OAuth2, pero aquí usamosLOGINpara simplicidad. - Comando
LIST: Lista todas las carpetas disponibles en el buzón, como "Inbox" o "Sent". - Cierre de sesión con
LOGOUT: Finaliza la sesión IMAP de manera segura. - Comunicación basada en sockets: Utilizamos un socket TCP para conectarnos al servidor IMAP en el puerto 143.
Tags
Lenguaje C
