PACKAGE BODY SEND_MAIL AS g_crlf CHAR (2) DEFAULT CHR (13) || CHR (10); g_mail_conn UTL_SMTP.connection; g_mailhost VARCHAR2 (255) := 'mail_hostname'; FUNCTION address_email (p_string IN VARCHAR2, p_recipients IN VARCHAR2) RETURN VARCHAR2 IS l_recipients LONG; v_recipient VARCHAR2 (200); BEGIN l_recipients := p_recipients || ','; WHILE INSTR (l_recipients, ',') > 0 LOOP v_recipient := SUBSTR (l_recipients, 1, INSTR (l_recipients, ',') - 1); l_recipients := SUBSTR (l_recipients,INSTR (l_recipients, ',') + 1,LENGTH (l_recipients)); UTL_SMTP.rcpt (g_mail_conn, v_recipient); END LOOP; l_recipients := p_string || p_recipients; RETURN l_recipients; END; PROCEDURE send ( p_sender_email IN VARCHAR2, p_from IN VARCHAR2, p_to IN VARCHAR2, p_cc IN VARCHAR2, p_bcc IN VARCHAR2, p_subject IN VARCHAR2, p_body IN LONG ) IS l_to_list LONG; l_cc_list LONG; l_bcc_list LONG; PROCEDURE inl_writedata (p_text IN VARCHAR2) IS BEGIN IF (p_text IS NOT NULL) THEN UTL_SMTP.write_data (g_mail_conn, p_text || g_crlf); END IF; END; BEGIN g_mail_conn := UTL_SMTP.open_connection (g_mailhost, 25); UTL_SMTP.Ehlo (g_mail_conn, g_mailhost); utl_smtp.command(g_mail_conn, 'AUTH LOGIN'); utl_smtp.command(g_mail_conn,UTL_RAW.CAST_TO_VARCHAR2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_auth_user)))); utl_smtp.command(g_mail_conn,UTL_RAW.CAST_TO_VARCHAR2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_auth_pwd)))); UTL_SMTP.mail (g_mail_conn, p_sender_email); IF p_to IS NOT NULL THEN l_to_list := address_email ('To: ',p_to); END IF; IF p_cc IS NOT NULL THEN l_cc_list := address_email ('Cc: ',p_cc); END IF; IF p_bcc IS NOT NULL THEN l_bcc_list := address_email ('Bcc: ', p_bcc); END IF; UTL_SMTP.open_data (g_mail_conn); inl_writedata ('From: ' || NVL (p_from, p_sender_email)); inl_writedata ('Subject: ' || NVL (p_subject, '(No Subject)')); inl_writedata (l_to_list); IF l_cc_list IS NOT NULL THEN inl_writedata (l_cc_list); END IF; If p_body is not null then UTL_SMTP.write_data (g_mail_conn, '' || g_crlf); UTL_SMTP.write_raw_data (g_mail_conn, p_body); End if; UTL_SMTP.close_data (g_mail_conn); UTL_SMTP.quit (g_mail_conn); END; END;