Enviar correos con PL/SQL en Oracle

Posted by Paola Pullas | Posted in Oracle, Tips | Posted on 03-06-2008

5

A continuación les dejo un pequeño procedure hecho en PL/SQL, que les permitirá enviar correos electrónicos:

 
 
PROCEDURE AU_GN_SEND_MAIL(
sender IN VARCHAR2,
recipient IN VARCHAR2,
ccrecipient IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2,
blnResultado IN OUT BOOLEAN)

IS
crlf VARCHAR2(2):= UTL_TCP.CRLF;
connection utl_smtp.connection;
mailhost VARCHAR2(30) := ‘aqui ip de server;
header VARCHAR2(1000);
arrayRECIPIENTS AU_GN_GENERAL.array_VARCHAR2;
arrayCCRECIPIENTS AU_GN_GENERAL.array_VARCHAR2;
i NUMBER:=0;
j NUMBER:=0;
v_recipient VARCHAR2(100) := ”;
v_ccrecipient VARCHAR2(100) := ”;
hd_recipient VARCHAR2(1000) := ”;
hd_ccrecipient VARCHAR2(1000) := ”;

BEGIN
— Start the connection
connection := utl_smtp.open_connection(mailhost,25);
hd_recipient := REPLACE(recipient, ‘|’, ‘,’);
hd_ccrecipient := REPLACE(ccrecipient, ‘|’, ‘,’);
header:= ‘Date: ‘||TO_CHAR(SYSDATE,’dd Mon yy hh24:mi:ss’)||crlf||
‘From: ‘||sender||”||crlf||
‘Subject: ‘||subject||crlf||
‘To: ‘||hd_recipient||crlf||
‘CC: ‘||hd_ccrecipient;

— Handshake with the SMTP server
utl_smtp.helo(connection, mailhost);
utl_smtp.mail(connection, sender);

IF recipient IS NOT NULL THEN
   arrayRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(recipient, ‘|’);
   FOR i IN arrayRECIPIENTS.FIRST..arrayRECIPIENTS.LAST LOOP
    v_recipient := arrayRECIPIENTS(i);
    IF (v_recipient IS NOT NULL OR v_recipient != ”) THEN
    utl_smtp.rcpt(connection, v_recipient);
       END IF;
   END LOOP;
END IF;

IF ccrecipient IS NOT NULL THEN
   arrayCCRECIPIENTS := AU_GN_GENERAL.AU_GN_OBTENER_ARRAY_CHAR(ccrecipient, ‘|’);
   FOR j IN arrayCCRECIPIENTS.FIRST..arrayCCRECIPIENTS.LAST LOOP
    v_ccrecipient := arrayCCRECIPIENTS(j);
    IF (v_ccrecipient IS NOT NULL OR v_ccrecipient != ”) THEN
    utl_smtp.rcpt(connection, v_ccrecipient);
    END IF;
   END LOOP;
END IF;

IF recipient IS NULL AND ccrecipient IS NULL THEN
   dbms_output.put_line(‘ Mail NO sent.’);
   blnResultado := false;
ELSE
   utl_smtp.open_data(connection);

   — Write the header
   utl_smtp.write_data(connection, header);
   utl_smtp.write_data(connection, crlf ||message);
   utl_smtp.close_data(connection);
   dbms_output.put_line(‘ Mail sent.’);  
   blnResultado := true;
END IF;

utl_smtp.quit(connection);

EXCEPTION

WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line(‘ Invalid Operation in SMTP transaction.’);
blnResultado := false;
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line(‘ Temporary problems with sending email – try again
later.’);
blnResultado := false;
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line(‘ Errors in code for SMTP transaction.’);
blnResultado := false;

END;

Autor: Gary Vergara

Be Sociable, Share!

Comments (5)

Conoce alguien la forma de agregar un adjunto a un mail que se envia directamente desde la base de datos?

hola que tal, sabes estoy probando tu proceso pero me presenta error al momento de llamar a esta línea “AU_GN_GENERAL” podrías ayudarme, millón gracias

Hola, tengo el mismo problema de “AU_GN_GENERAL”, podrías por favor ayudarme, tengo la versión 10g.

AU_GN_GENERAL vendría a ser como un PACKAGE que no están especificando, y a su vez tiene una función AU_GN_OBTENER_ARRAY_CHAR que tampoco la están especificando, podrían explicar la función por lo menos.
Gracias!

Another Difference :replace function rplcaees a sequence of characters into another sequence of characterstranslate function also rplcaees a sequence of characters to other sequence of character,But the main difference is it rplcaees character by character.And it rplcaees a single character at a time.

Write a comment