IMAP - Protocolo de Acceso a Mensajes de Internet

  • 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:

  1. Autenticación con LOGIN: El cliente envía credenciales al servidor. IMAP soporta métodos más seguros como OAuth2, pero aquí usamos LOGIN para simplicidad.
  2. Comando LIST: Lista todas las carpetas disponibles en el buzón, como "Inbox" o "Sent".
  3. Cierre de sesión con LOGOUT: Finaliza la sesión IMAP de manera segura.
  4. Comunicación basada en sockets: Utilizamos un socket TCP para conectarnos al servidor IMAP en el puerto 143.

 

 

 

 

Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...