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