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;
/