Sidebar

Enviar un correo electrónico

DECLARE
    v_file_location VARCHAR2(100) := 'ruta_del_archivo/archivo.csv'; -- Ruta del archivo CSV
    v_email_subject VARCHAR2(100) := 'Archivo CSV Adjunto'; -- Asunto del correo electrónico
    v_email_body CLOB := 'Adjunto encontrarás el archivo CSV.'; -- Cuerpo del correo electrónico
    v_email_recipients VARCHAR2(4000) := This email address is being protected from spambots. You need JavaScript enabled to view it., This email address is being protected from spambots. You need JavaScript enabled to view it.'; -- Lista de direcciones de correo electrónico separadas por comas
    v_email_sender VARCHAR2(100) := This email address is being protected from spambots. You need JavaScript enabled to view it.'; -- Dirección de correo del remitente
    v_email_server VARCHAR2(100) := 'servidor_smtp'; -- Servidor SMTP

    v_email_conn utl_smtp.connection;
    v_file_content CLOB;
    v_file_handle UTL_FILE.FILE_TYPE;
    v_buffer VARCHAR2(32767);
BEGIN
    -- Leer el contenido del archivo CSV
    v_file_handle := UTL_FILE.FOPEN('ruta_del_directorio', 'archivo.csv', 'R');
    BEGIN
        LOOP
            UTL_FILE.GET_LINE(v_file_handle, v_buffer);
            v_file_content := v_file_content || v_buffer || CHR(10); -- Agregar nueva línea
        END LOOP;
    EXCEPTION
        WHEN no_data_found THEN
            UTL_FILE.FCLOSE(v_file_handle);
    END;

    -- Cerrar el archivo
    UTL_FILE.FCLOSE(v_file_handle);

    -- Conectar al servidor SMTP
    v_email_conn := utl_smtp.open_connection(v_email_server, 25);

    -- Saludo inicial al servidor
    utl_smtp.helo(v_email_conn, v_email_server);

    -- Indicar el remitente del correo electrónico
    utl_smtp.mail(v_email_conn, v_email_sender);

    -- Iterar sobre los destinatarios y enviar correo electrónico a cada uno
    FOR recipient IN (SELECT TRIM(REGEXP_SUBSTR(v_email_recipients, '[^,]+', 1, LEVEL)) AS recipient_email FROM DUAL CONNECT BY LEVEL <= REGEXP_COUNT(v_email_recipients, ',') + 1) LOOP
        -- Indicar el destinatario del correo electrónico
        utl_smtp.rcpt(v_email_conn, recipient.recipient_email);
    END LOOP;

    -- Iniciar el cuerpo del mensaje
    utl_smtp.open_data(v_email_conn);

    -- Encabezado del correo electrónico
    utl_smtp.write_data(v_email_conn, 'Date: ' || TO_CHAR(SYSDATE, 'Dy, DD Mon YYYY hh24:mi:ss') || CHR(13));
    utl_smtp.write_data(v_email_conn, 'Subject: ' || v_email_subject || CHR(13));
    utl_smtp.write_data(v_email_conn, 'From: ' || v_email_sender || CHR(13));
    utl_smtp.write_data(v_email_conn, 'To: ' || v_email_recipients || CHR(13));
    utl_smtp.write_data(v_email_conn, 'MIME-Version: 1.0' || CHR(13));
    utl_smtp.write_data(v_email_conn, 'Content-Type: text/csv; charset=utf-8' || CHR(13));
    utl_smtp.write_data(v_email_conn, 'Content-Disposition: attachment; filename="archivo.csv"' || CHR(13));
    utl_smtp.write_data(v_email_conn, 'Content-Transfer-Encoding: 8bit' || CHR(13));
    utl_smtp.write_data(v_email_conn, CHR(13));

    -- Adjuntar el contenido del archivo CSV al correo electrónico
    utl_smtp.write_data(v_email_conn, v_file_content);

    -- Cerrar el cuerpo del mensaje
    utl_smtp.close_data(v_email_conn);

    -- Cerrar la conexión SMTP
    utl_smtp.quit(v_email_conn);
END;
/

Tips BD