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

Forms Oracle Discussion :

[9i & 10gR1][forms 10g] Envois de mails via UTL_SMTP


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut [9i & 10gR1][forms 10g] Envois de mails via UTL_SMTP
    Bonjour tout le monde,

    Je cherche à envoyer des e-mail via forms 10g pour des bases en 9i et 10gR1.
    J'ai bien sûr effectué une recherche avancée et je pensais avoir trouvé une solution (fourni aimablement par SheikYerbouti et Helyos) :
    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
    CREATE OR REPLACE 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;
    /
    J'invoque ce code de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec html_email(p_to => 'xxx@orange.fr', p_from => 'xxx@orange.fr', p_subject => 'SUJET', p_text => 'MAIL VERSION TEXTE avec smtp.orange.fr', p_html => 'MAIL VERSION HTML', p_smtp_hostname => 'smtp.orange.fr', p_smtp_portnum => '25');
    où les adresses représentées par p_to et p_from sont valides (je les ai modifiées dans ce post pour des raisons de confidentialité).

    Résultat :
    10g SOC10> CREATE OR REPLACE PROCEDURE html_email(
    ...
    70 /

    Procédure créée.

    10g SOC10> exec html_email(p_to => 'xxx@orange.fr', p_from => 'xxx@orange.fr', p_subject => 'SUJET',
    p_text => 'MAIL VERSION TEXTE avec smtp.orange.fr', p_html => 'MAIL VERSION HTML', p_smtp_hostname
    => 'smtp.orange.fr', p_smtp_portnum => '25');

    Procédure PL/SQL terminée avec succès.
    MAIS : je ne reçois aucun mail

    J'ai modifié l'adresse du serveur SMTP en : smtp.orange.fr, smtp.yahoo.fr, smtp.free.fr
    J'ai aussi testé avec d'autres adresses mails mais rien n'y fait : pas d'erreur ni de mail reçu.

    Pourquoi ?
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Peut-être un proxy intermédiare qui bloquerait l'envoi ?

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    En fait, comme toi Sheik, je penche pour un problème externe à Oracle.
    En effet, j'arrive bien à configurer Outlook pour utiliser le serveur SMTP de notre FAI mais quand je fais un telnet sur un serveur SMTP quelconque, impossible d'envoyer un mail en respectant le protocole.

    J'obtiens :
    553 <xxx@yyy.fr>: Sender address rejected: not logged in
    et pourtant l'adresse mail que je mets est valide.

    J'imagine donc que c'est un souci indépendant d'Oracle ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Nouvelle semaine donc nouveaux résultats : j'ai effectué un envoi de mail par le protocole SMTP en utilisant un bon vieux telnet.
    A ma grande surprise, ça n'avait pas fonctionné la semaine dernière, j'obtenais systématiquement un message 550 lorsque j'essayais de renseigner le "RCPT TO".
    L'important est que ça fonctionne aujourd'hui sans souci.
    Apparemment, cela venait d'un problème technique de mon FAI.

    Toujours est-il, j'ai essayé de bout de code et j'ai effectivement reçu un mail :
    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
    CREATE OR REPLACE PROCEDURE send_test_message IS
        mailhost    VARCHAR2(64) := 'smtp.orange.fr';
        sender      VARCHAR2(64) := '<X@Y.Z>'; -- les chevrons sont obligatoires !!!!
        recipient   VARCHAR2(64) := '<A@B.C>'; -- les chevrons sont obligatoires !!!!
        mail_conn  utl_smtp.connection;
    BEGIN
        mail_conn := utl_smtp.open_connection(mailhost, 25);
        utl_smtp.helo(mail_conn, mailhost);
        utl_smtp.mail(mail_conn, sender);
        utl_smtp.rcpt(mail_conn, recipient);
        utl_smtp.open_data(mail_conn);
        utl_smtp.write_data(mail_conn, 'bla bla' || chr(13));
        utl_smtp.close_data(mail_conn);
        utl_smtp.quit(mail_conn);
        EXCEPTION
            WHEN OTHERS THEN
               NULL;
               -- dbms_output.put_line('Une erreur est survenue...');
    END;
    /
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. corriger les erreurs d'un form d'envoie de mail
    Par Stéph utilisateur d'acces dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2009, 16h58
  2. Envoi de mail via Outlook
    Par Chromatic dans le forum Access
    Réponses: 8
    Dernier message: 14/02/2006, 11h30
  3. Confirmation d'envoi de mail Via Access
    Par Hamdi dans le forum Access
    Réponses: 2
    Dernier message: 01/02/2006, 13h14
  4. Envoi de mail via un macro vba sur excel
    Par momolamoto dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/12/2005, 18h51
  5. envoi de mail via Oracle
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 26
    Dernier message: 07/11/2005, 10h20

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