rem ----------------------------------------------------------------------- rem Filename: smtp.sql rem Purpose: Send e-mail messages from PL/SQL rem Notes: From Oracle8i release 8.1.6 one can send e-mail messages rem directly from PL/SQL using either the UTL_TCP or UTL_SMTP rem packages. No pipes or external procedures required. rem Date: 27-Mar-2000 rem Author: Frank Naude (frank@onwe.co.za) rem ----------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE SEND_MAIL ( msg_from varchar2 := 'oracle', msg_to varchar2, msg_subject varchar2 := 'E-Mail message from your database', msg_text varchar2 := '' ) IS c utl_tcp.connection; rc integer; BEGIN c := utl_tcp.open_connection('127.0.0.1', 25); -- open the SMTP port dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'HELO localhost'); dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'MAIL FROM: '||msg_from); dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'RCPT TO: '||msg_to); dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'DATA'); -- Start message body dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'Subject: '||msg_subject); rc := utl_tcp.write_line(c, ''); rc := utl_tcp.write_line(c, msg_text); rc := utl_tcp.write_line(c, '.'); -- End of message body dbms_output.put_line(utl_tcp.get_line(c, TRUE)); rc := utl_tcp.write_line(c, 'QUIT'); dbms_output.put_line(utl_tcp.get_line(c, TRUE)); utl_tcp.close_connection(c); -- Close the connection EXCEPTION when others then raise_application_error(-20000, 'Unable to send e-mail message from pl/sql'); END; / show errors -- Examples: set serveroutput on exec send_mail(msg_to =>'orafaq@oraaq.org'); exec send_mail(msg_to =>'orafaq@orafaq.org', msg_text=>'Look Ma, I can send mail from plsql' );