IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Envoi de message avec utl_smtp


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut Envoi de message avec utl_smtp
    Bonjour. Je suis entrain d'écrire une procédure me permettant d'envoyer de message dont le contenu est issu d'une requête. Quelqu'un peut m'aider à réaliser cette tâche par l'utilisation du package UTL_SMTP?
    Quand je compile, le message d'erreur est: "Avertissement: procédure créée avec des erreurs de compilation". Ci-dessous le code.
    Merci d'avance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE OR REPLACE PROCEDURE Envoie_message 
     (destinataire IN VARCHAR2, 
      sujet IN VARCHAR2, 
      message IN VARCHAR2) 
     IS 
       mailhost VARCHAR2(30):='adresse ip du serveur'; 
       mail_conn utl_smtp.connection;
       crlf VARCHAR2(30):=CHR(13)||CHR(10); 
       mesg VARCHAR2(1000); 
     BEGIN 
        mail_conn:=utl_smtp.open_connection(mailhost,100); 
        mesg:='Date: '||TO_CHAR(SYSDATE, 'Mon yy hh24 dd: mi: ss')||crlf|| 
               'De: <'||'relevecptbcc@bcc-bank.com'||'> '||crlf|| 
               'Objet:'||sujet||crlf|| 
               'To: '||destinataire||crlf||''||message;
        utl_smtp.helo (mail_conn, mailhost); 
        utl_smtp.mail (mail_conn, 'relevecptbcc@bcc-bank.com'); 
        utl_smtp.rcpt (mail_conn, destinataire); 
        utl_smtp.data (mail_conn, mesg); 
        utl_smtp.quit (mail_conn); 
     END;
     /

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par taradoum Voir le message
    Quand je compile, le message d'erreur est: "Avertissement: procédure créée avec des erreurs de compilation".
    Faîtes un show err pour voir l'erreur.
    Et regardez la doc UTL_SMTP

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Cherchez utl_stmp sur AskTom ou "Email From Oracle PL/SQL (UTL_SMTP)" pour divers exemples d'utilisation.

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bonsoir,

    J'ai fait une procédure à l'époque en repart d'un exemple que je ne retrouve plus , ma base de travail était une 9i de mémoire mais laquelle je sais plus , peut être que cela peut vous aider , je l'ai pas tester depuis que je suis en 11G, mais cela fonctionnait bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    PROCEDURE html_email(p_to IN VARCHAR2,
    		     p_from IN VARCHAR2,
                         p_subject IN VARCHAR2,
                         p_text IN VARCHAR2 DEFAULT NULL,
                         p_html IN VARCHAR2 DEFAULT NULL,
                         p_smtp_hostname IN VARCHAR2,
                         p_smtp_portnum IN VARCHAR2) IS
                         l_boundary VARCHAR2(255) DEFAULT 'a1b2c3d4e3f2g1';
                         l_connection utl_smtp.connection;
                         l_body_html CLOB := empty_clob;
                         l_offset NUMBER;
                         l_ammount NUMBER;
                         l_temp VARCHAR2(32767) DEFAULT NULL;
                         l_dest VARCHAR2(32767);
                         l_dest_tmp VARCHAR2(32767);
     
    BEGIN
     
    l_dest := p_to;
    l_connection := utl_smtp.open_connection(p_smtp_hostname, p_smtp_portnum);
    utl_smtp.helo(l_connection, p_smtp_hostname);
    utl_smtp.mail(l_connection, p_from);
    WHILE instr(l_dest, ',') != 0 LOOP
    l_dest_tmp := substr(l_dest, 1, instr(l_dest, ',') - 1);
    l_dest := substr(l_dest, instr(l_dest, ',') + 1);
    utl_smtp.rcpt(l_connection, l_dest_tmp);
    END LOOP;
    utl_smtp.rcpt(l_connection, l_dest);
    l_temp := l_temp || 'MIME-Version: 1.0' || chr(13) || chr(10);
    l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
    l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
    l_temp := l_temp || 'Subject: ' || p_subject || chr(13) || chr(10);
    l_temp := l_temp || 'Reply-To: ' || p_from || chr(13) || chr(10);
    l_temp := l_temp || 'Content-Type: multipart/alternative; boundary=' ||
    chr(34) || l_boundary || chr(34) || chr(13) || chr(10);
    dbms_lob.createtemporary(l_body_html, FALSE, 10);
    dbms_lob.WRITE(l_body_html, length(l_temp), 1, l_temp);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    l_temp := '--' || l_boundary || chr(13) || chr(10);
    l_temp := l_temp || 'content-type: text/plain; charset=windows-1252' ||
    chr(13) || chr(10) || chr(13) || chr(10);
    dbms_lob.WRITE(l_body_html, length(l_temp), l_offset, l_temp);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.WRITE(l_body_html, length(p_text), l_offset, p_text);
    l_temp := chr(13) || chr(10) || chr(13) || chr(10) || '--' ||
    l_boundary || chr(13) || chr(10);
    l_temp := l_temp || 'content-type: text/html; charset=windows-1252' ||
    chr(13) || chr(10) || chr(13) || chr(10);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.WRITE(l_body_html, length(l_temp), l_offset, l_temp);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.WRITE(l_body_html, length(p_html), l_offset, p_html);
    l_temp := chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13);
    l_offset := dbms_lob.getlength(l_body_html) + 1;
    dbms_lob.WRITE(l_body_html, length(l_temp), l_offset, l_temp);
    l_offset := 1;
    l_ammount := 1900;
    utl_smtp.open_data(l_connection);
    WHILE l_offset < dbms_lob.getlength(l_body_html) LOOP
    utl_smtp.write_data(l_connection, dbms_lob.substr(l_body_html, l_ammount, l_offset));
    l_offset := l_offset + l_ammount;
    l_ammount := least(1900, dbms_lob.getlength(l_body_html) - l_ammount);
    END LOOP;
    utl_smtp.close_data(l_connection);
    utl_smtp.quit(l_connection);
    dbms_lob.freetemporary(l_body_html);
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK;
    END;

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut Merci
    Citation Envoyé par mnitu Voir le message
    Cherchez utl_stmp sur AskTom ou "Email From Oracle PL/SQL (UTL_SMTP)" pour divers exemples d'utilisation.
    Merci pour votre aide précieux. La procédure a marché après avoir apporter quelques correction. Maintenant, en exécutant cette dernière, oracle me renvoit l'erreur 421 smtp non disponible
    Merci d'avvance

  6. #6
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tchad

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2011
    Messages : 22
    Par défaut sùtp non disponible
    La procédure pour l'envoie de mail est créée avec succès. Son exécution me revoit des erreurs(code si dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE OR REPLACE PROCEDURE Envoie_mail (destinataire IN VARCHAR2,
                                           emissaire IN VARCHAR2,
                                           sujet IN VARCHAR2,
                                           corps_messag IN VARCHAR2,
                                           serveur_smtp IN VARCHAR2,
                                           port_smtp IN NUMBER DEFAULT 100)
    AS
      l_mail_conn   UTL_SMTP.connection;
    BEGIN
      l_mail_conn := UTL_SMTP.open_connection(serveur_smtp, port_smtp);
      UTL_SMTP.helo(l_mail_conn, serveur_smtp);
      UTL_SMTP.mail(l_mail_conn, emissaire);
      UTL_SMTP.rcpt(l_mail_conn, destinataire);
     
      UTL_SMTP.open_data(l_mail_conn);
     
      UTL_SMTP.write_data(l_mail_conn, 'Date: '||TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf);
      UTL_SMTP.write_data(l_mail_conn, 'To: '||destinataire||UTL_TCP.crlf);
      UTL_SMTP.write_data(l_mail_conn, 'From: '||emissaire||UTL_TCP.crlf);
      UTL_SMTP.write_data(l_mail_conn, 'Subject: '||sujet||UTL_TCP.crlf);
      UTL_SMTP.write_data(l_mail_conn, 'Reply-To: '||emissaire||UTL_TCP.crlf||UTL_TCP.crlf);
     
      UTL_SMTP.write_data(l_mail_conn, corps_messag||UTL_TCP.crlf||UTL_TCP.crlf);
      UTL_SMTP.close_data(l_mail_conn);
     
      UTL_SMTP.quit(l_mail_conn);
    END;
    J'appel la fonction en passant l'adresse du serveur smtp logé sur notre serveur exchange c'est à dire : EXECUTE Envoie_mail('taradoum@gmail.com', 'relevecptbcc@bcc-bank.com', 'Banque commerciale du Chari', 'This is a test message.', 'adress ip', 100);

    Le code erreur est la suivante:


    ERREUR Ó la ligne 1 :
    ORA-29279: erreur permanente SMTP : 550 5.7.1 Unable to relay for
    taradoum@gmail.com
    ORA-06512: Ó "SYS.UTL_SMTP", ligne 21
    ORA-06512: Ó "SYS.UTL_SMTP", ligne 99
    ORA-06512: Ó "SYS.UTL_SMTP", ligne 241
    ORA-06512: Ó "SYS.ENVOIE_MAIL", ligne 13
    ORA-06512: Ó ligne 1

Discussions similaires

  1. Envoi de message avec Signature
    Par BuzzLeclaire dans le forum Débuter
    Réponses: 6
    Dernier message: 02/06/2009, 13h40
  2. envoi mail html avec utl_smtp
    Par n00noors dans le forum SQL
    Réponses: 10
    Dernier message: 30/04/2007, 15h26
  3. envoi de messages avec MSN-Hotmail
    Par bassim dans le forum Internet
    Réponses: 1
    Dernier message: 24/04/2007, 10h36
  4. Envoi de message avec TServerSocket
    Par Dave48 dans le forum Développement
    Réponses: 2
    Dernier message: 23/03/2007, 11h16
  5. envoi de message avec la touche "enter"
    Par viny dans le forum Flash
    Réponses: 5
    Dernier message: 04/02/2007, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo