mar 01

Envoyer un mail avec PL/SQL

Tag: Développement, tipskarl verger @ 18:38

Petit exemple vous permettant d’envoyer un email à partir
de votre base ORACLE.

CREATE OR REPLACE PROCEDURE ENVOI_MAIL AS
BEGIN
DECLARE
   l_mailhost    VARCHAR2(64) := ’smtp.monrelais.fr’;
   l_from        VARCHAR2(64) := ‘moi@monrelais.fr’;
   l_subject     VARCHAR2(64) := ‘Un petit sujet’;
   l_to          VARCHAR2(32767) := ‘toi@monrelais.fr’;
   l_mail_conn   UTL_SMTP.connection;
   nbError       NUMBER(10) := 0;
   l_dest_tmp   VARCHAR2(32767);
BEGIN
   l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25);
   UTL_SMTP.helo(l_mail_conn, l_mailhost);
   UTL_SMTP.mail(l_mail_conn, l_from);
   WHILE INSTR(l_to, ‘,’) != 0 LOOP
      l_dest_tmp := SUBSTR(l_to, 1, INSTR(l_to, ‘,’) - 1);
      l_to     := SUBSTR(l_to, INSTR(l_to, ‘,’) + 1);
      UTL_SMTP.rcpt(l_mail_conn, l_dest_tmp);
   END LOOP;
   UTL_SMTP.rcpt(l_mail_conn, l_to);
   UTL_SMTP.open_data(l_mail_conn);
   UTL_SMTP.write_data(l_mail_conn, ‘Date: ‘ || TO_CHAR(SYSDATE, ‘DD-MON-YYYY HH24:MI:SS’) || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘From: ‘ || l_from || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘Subject: ‘ || l_subject || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘To: ‘ || l_to || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, ‘le corps du mail contenant de données’ || CHR(13)|| CHR(10));
   UTL_SMTP.write_data(l_mail_conn, || CHR(13)|| CHR(10));
   – on itere sur les resultat et rajoutons les valeurs dans le corp du mail
   FOR fields IN
   (
      SELECT
         FIELD_1
      FROM
         MA_TABLE
   )LOOP
      UTL_SMTP.write_data(l_mail_conn, fields.FIELD_1 || CHR(13)|| CHR(10));
    END LOOP;
    UTL_SMTP.close_data(l_mail_conn);
    UTL_SMTP.quit(l_mail_conn);
 END;
END ENVOI_MAIL;

One Response to “Envoyer un mail avec PL/SQL”

  1. adriens says:

    Bonjour,

    à noter que l’on peut aussi envoyer mes messsages instantanés depuis Oracle, en PL/SQL, grâce un package dédié (cf sîte) et open source.
    Du coup, on peut envoyer les messages à un serveur Jabber (ou Google talk directement), récupérer les alias des contacts via une table relationelle, … Tout ce ceci via un mapping vers des libs Java.
    Cordialement.

Leave a Reply