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

DB2 Discussion :

[SQL]Envoie de mail par une procedure


Sujet :

DB2

  1. #1
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut [SQL]Envoie de mail par une procedure
    Bonjour,

    Je voulais savoir comment on peut faire dans une procédure SQL pour lancer la commande d'envoie de mail suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SNDDST TYPE(*LMSG) TOINTNET(('blabla@blabla.com')) DSTD('sujet') LONGMSG(&VAR)
    Je précise que je créer ma procédure à partir de STRSQL. J'ai déjà essayer de mettre cette commande directement dans le code de ma procédure mais le problème c'est que STRSQL me fait une erreur sur TYPE(*LMSG)???

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Regles du Forum
    Bonjour

    Veuillez svp vous mettre en règle avec le forum en éditant votre post afin de modifier votre titre en conséquence. (Bouton en haut à droite du premier post de ce thread)

    Les règles du forum
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Précise un peu l'environement dans lequel tu es car la, cel ne me dis rien du tout.

  4. #4
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Salut jab,

    Je suis sous DB2 et je travaille sous STRQM. Je sais que pour faire l'envoie de mail on peut passer par un programme RPG ou encore CL mais je voudrais savoir si c'est possible directement dans ma procédure SQL

  5. #5
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut Re: [SQL]Envoie de mail par une procedure
    Citation Envoyé par yoyopi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SNDDST TYPE(*LMSG) TOINTNET(('blabla@blabla.com')) DSTD('sujet') LONGMSG(&VAR)
    Je ne pense pas que cela soit possible. Tu exécutes une commande système et non du SQL. Tu dois passer par ce qui est supporté comme language au niveau de ta procédure stockée.

  6. #6
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Merci jab c'est bien ce que je pensait qu'il fallait passer par un programme


    Merci à tous ceux qui ont réfléchis à mon problème

  7. #7
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2002
    Messages : 72
    Points : 1 063
    Points
    1 063
    Par défaut
    Je pense que cela est tout a fait possible avec ça , si votre système est un iSeires avec DB2400 (supposition d'apres les références au RPG etc)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CALL QSYS.QCMDEXC('SNDDST TYPE(*LMSG) TOINTNET(('blabla@blabla.com')) DSTD('sujet') LONGMSG(&VAR)' , 000000060.00000)
    (juste remplacer 0000000060.00000 par la longueur réelle de la chaine de la commande a passer et sans doute doubler les quote a l'interieur de la commande
    Ancien rédacteur Java/J2EE ,C++Builder

  8. #8
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Merci olivier, je vais essayer de faire ça et je te tiens au courant

  9. #9
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    J'ai fais ce que tu m'a dit Olivier mais j'ai une erreur de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom d'objet qualifié QCMDEXC non admis.
    Donc comment je peu faire?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Parce qu'il croit que QCMDEXC est une procédure stockée...

  11. #11
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Mouai mais comment je fais alors?!

  12. #12
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2002
    Messages : 72
    Points : 1 063
    Points
    1 063
    Par défaut
    Une erreur nom qualitfiée etc...
    alors c'est qu'il faut utiliser le / et pas le . comme séprateur lib et commande.

    Le . c'est en notation SQL et le / c'est une notation SYSTEM. Par défaut l'as est en notation SYSTEM

    Cette convention d'appellation est définie au niveau du STRSQL ou des paramètres du drvier JDBC ou ODBC ou dans la commande RUNSQLSTMT selon ce qu'on utilise.



    voici l'expression executable directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CALL QSYS/QCMDEXC('SNDDST TYPE(*LMSG)                               
    TOINTNET((''blabla@blabla.com'')) DSTD(''sujet'') LONGMSG(&VAR)' ,  
    000000060.00000)
    Ancien rédacteur Java/J2EE ,C++Builder

  13. #13
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Merci olivier cette partie du code fonctionne, le problème maintenant c'est que après le CALL je dois fermer ma procédure en faisant un END;

    Et maintenant STRSQL me dit que le end est mal placé donc j'ai essayer de mettre un point virgule après le CALL mais ça ne change rien. Il n'accepte aucune expression après le CALL donc comment je peut faire??

    Merci d'avance

  14. #14
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2002
    Messages : 72
    Points : 1 063
    Points
    1 063
    Par défaut
    En sql interactif (strsql ) il ne faut pas de ; ni de end...

    Toutes les commandes ne sont pas utilisable depuis le strsql... donc il faut peut etre plutot créer une petite procédure stockée pour faire l'essai.

    Verifiez aussi avec l'historique du travail qu'il n'y a pas d'erreur dans la commande.

    celle ci fonctionne par exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CALL QSYS/QCMDEXC('WRKSPLF' ,                      
    000000007.00000)
    Ancien rédacteur Java/J2EE ,C++Builder

  15. #15
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    En strsql il faut bien un end lorsque l'on créer une procédure mais il ne faut pas mettre de ; après celui-ci!!!

    Quelqu'un peut-il me dire pourquoi cette procedure ne fais rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create procedure QSYS/test() language SQL                    
    begin                                                             
    declare v_test char(50) default 'test';                      
    CALL QSYS/QCMDEXC('SNDDST TYPE(*LMSG) TOINTNET((''pseudo@hote'')) DSTD(''SUJET'') LONGMSG(&v_test)' , 50);  
    end
    les 2 ' qui entoure l'adresse ainsi que le sujet son obligatoire sinon ça ne marche pas

    La création fonctionne ensuite je sors de strsql et je fais : toujours pas d'erreur mais toujours pas de mail non plus!!

    Mon nom d'utilisateur est bien dans la liste de distribution donc l'envoie du mail devrait fonctionner mais ce n'est pas le cas.

    Quelqu'un à t'il une solution?

  16. #16
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    A mon avis tu dois avoir une erreur qui s'affiche quelque part.
    Le 50 que tu as mis en 2° paramètre de la commande CALL QCMDEXC n'est pas la taille de ta variable v_test mais la longueur du premier paramètre de la commande CALL QCMDEXC. A vue de nez ça fait dans les 80 caractères. Si cette valeur est mauvaise, l'appel de QCMDEXC se plante.

  17. #17
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    OK mais es-ce que la taille que l'on met en deuxième paramètre doit etre exactement de la bonne taille?

    Doit on compter ce guillemet là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CALL QSYS/QCMDEXC([b]'[/b]SNDDST
    et ceux qui sont avant l'adresse et le sujet?

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Oui, tu dois indiquer la taille au caractère près.
    Les guillemets qui encadrent le 1° paramètre ne comptent pas. Par contre, ceux qui sont doublés comptent tous.
    Ex : ''sujet'' --> 9 caractères.
    Le plus simple est peut-être de mettre le 1° paramètre dans une variable et d'utiliser une fonction qui calcule sa longueur.

  19. #19
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Quelqu'un peut il me dire comment il faut paramétrer DB2/400 pour que l'envoie de mail soit possible, si possible en détail car je suis novice dans tous ce qui concerne le paramétrage de DB2.

    Merci d'avance

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 97
    Points : 79
    Points
    79
    Par défaut Paramêtrage Iseries ou As400 pour l'envoie de Mail
    Yoyopi

    Ci joint une procedure pour parametré l'envoie mail natif de l'as400 via un routeur de mail. sinon si ca t'intéresse ya tjrs javamail de possible, mais le natif permet d'utiliser les emails renseigner sur les comptes utilisateurs directement via Iseries Navigator.

    Pour ma part j'ai déjà utilisé les deux

    Pour Info, ca peut servir a d'autre :
    (le seul probléme que j'ai rencontré suite a cette conf, lors du démarrage du serveur smtp, a été d'ajouter aprés le cfgtcp option 10 pour la table host l'option 12 pour re-renseigner mon serveur de mail ainsi que son domain.)

    /*===================================*/
    /* How to send email from the AS/400 */
    /*===================================*/

    /*===================================*/
    /* */
    /* Author: Steve Miall */
    /* Company: Genesis V */
    /* Web site: http://www.genesisv.com */
    /* date: 4th October 2000 */
    /* */
    /*===================================*/


    The command EMAIL, the CL program EMAILC, and the RPG pgm XFMTEM
    are used for sending emails direct from the AS/400. The idea is that
    the command could be built into AS/400 applications to allow the system
    to email orders, invoices, queries, etc. Please don't use it to spam
    all your prospects!

    This does NOT include instructions or software for receiving emails
    on the AS/400.

    Requirements:

    1. OS/400 release 4.2 or higher!

    2. Must have an SMTP gateway somwhere on your network.

    The following are set-up instructions.

    1. Get the IP address of the email (SMTP) gateway. This is either a PC
    or network server on your network, or it is the server at your local
    ISP (internet service provider). If you are set up to send email
    from your PC, then it is the same IP address as the PC is using for
    outgoing email.

    2. Make sure this SMTP gateway is in your AS/400 hosts table:
    ADDTCPHTE INTNETADR('192.168.1.50') HOSTNAME('SMTP')
    If the internet address is already in the table, make a note of its
    Host table name.

    3. Change the SMTP attributes:
    CHGSMTPA AUTOSTART(*YES) MAILROUTER('SMTP') FIREWALL(*YES)

    4. Add your email users to the SMTP alias names system table.
    CFGTCPSMTP then option 1.
    This is the users you want to be able to send emails.
    This is only so that the email gets a decent looking "from"
    name, and so that email replies go to a real email account.

    If you don't add an alias table, then your email will be sent from:
    USER@ADDR.DOMAIN.COM where the USER and ADDR are your user ID and
    Address, and DOMAIN.COM is the domain name of the AS/400.
    - use WRKDIRE *ALL to see the user names registered in the
    directory.
    - To review or change the domain name of the 400 use the command:
    CHGTCPDMN - prompt command with F4.

    The alias table consists of USER ID, Address, SMTP userid and
    SMTP Domain:
    for example, my entry is:
    USERID MYUSER
    ADDRESS GVUK
    SMTP user name support
    SMTP Domain GENESISV.COM
    With this there, my mail is sent from
    support@GENESISV.COM
    But without it, it is sent from
    MYUSER@GVUK.GVUK.GENESISV.COM
    where MYUSER=User
    GVUK=Address
    GVUK=Host name
    GENESISV.COM=Domain

    5. Add a generic user in the directory to route email:
    Either WRKDIRE and take the add option, or:
    ADDDIRE (INTERNET SMTPRTE) USRD('Internet generic user') +
    SYSNAME(TCPIP) NETUSRID(*USRID) +
    MSFSRVLVL(*USRIDX) PREFADR(NETUSRID *IBM ATCONTXT)

    6. Add a distribution Queue:
    ADDDSTQ DSTQ(QSMTPQ) RMTLOCNAME(TCPIP) DSTQTYPE(*RPDS)

    7. Add a routing table entry:
    CFGDSTSRV option 2:
    Destination system
    name/Group . . . . . : TCPIP
    Description . . . . . : TCP/IP Routing
    Service level:
    Fast:
    Queue name . . . . : QSMTPQ
    Maximum hops . . . : *DFT
    Status:
    Queue name . . . . : QSMTPQ
    Maximum hops . . . : *DFT
    Data high:
    Queue name . . . . : QSMTPQ
    Maximum hops . . . : *DFT
    Data low:
    Queue name . . . . : QSMTPQ


    8. Change the distribution attributes:
    CHGDSTA KEEPRCP(*BCC) USEMSFLCL(*NO) SMTPRTE(INTERNET SMTPRTE)

    9. There can be an authority problem, which can cause the MSF
    facility to die. This stops all emailing AND all QSNADS message
    sending, until you next ENDMSF and STRMSF.

    To get round it, grant the following authorities:
    GRTOBJAUT OBJ(QSYS/QZMFARSV) OBJTYPE(*PGM) USER(QTCP) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFARSV) OBJTYPE(*PGM) USER(QMSF) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFASCR) OBJTYPE(*PGM) USER(QTCP) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFASCR) OBJTYPE(*PGM) USER(QMSF) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFACHG) OBJTYPE(*PGM) USER(QTCP) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFACHG) OBJTYPE(*PGM) USER(QMSF) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFACRT) OBJTYPE(*PGM) USER(QTCP) AUT(*USE)
    GRTOBJAUT OBJ(QSYS/QZMFACRT) OBJTYPE(*PGM) USER(QMSF) AUT(*USE)

    10. Start the server:
    STRTCPSVR *SMTP

    11. Test to see if it sends:
    SNDDST TYPE(*LMSG) TOUSRID((INTERNET SMTPRTE)) +
    DSTD('E-mail') +
    TOINTNET((me@mysystem.com')) +
    SUBJECT('This is the subject') +
    LONGMSG('This is the message')
    and then go to your mail receiver and see if you have received
    the message.


    12. To send from a QDLS document:

    SNDDST TYPE(*FILE) TOUSRID((INTERNET SMTPRTE)) +
    TOINTNET(('me@mysystem.com')) +
    DSTD('Email') +
    MSG('This is a test') +
    DOC(document.TXT) FLR(folder)

    The subject will be the document description - the SUBJECT parameter
    is accepted but ignored. The MSG parameter is optional.
    You cannot have a long message with an attached document, and you
    cannot attach 2 documents.

    13. For now, all email recipients must be *PRI (primary send to) or
    *BCC (blind copy to). Do NOT use *CC (copy to) because the
    email format goes screwy - it has an extra new line character in a
    crucial place which means marker for the start and end of the text
    is corrupted. The recipients end up with a message saying
    "your browser does not accept the format" etc.
    However, you can have several *PRI (primary send to) addresses.

    14. For sending emails with the data from source documents, use the
    new command EMAIL, which uses the CL pgm EMAILC, and calls the
    formating program XFMTEM.

    This allows .a .A at the start of the line or :/P mid-line
    to mean new paragraph, and :/N to mean new line.

    It also gets rid of the junk at the end of a source member
    which has been maintained using the old EDTTXT - in case anybody
    is still using this.

    15. The source is separately downloadable from this web site.
    To compile:
    a. CRTLIB GVEMAIL TEXT('Email source library')
    b. Create source files to copy the source into:
    CRTSRCPF GVEMAIL/QRPGSRC
    CRTSRCPF GVEMAIL/QCLSRC
    CRTSRCPF GVEMAIL/QCMDSRC
    e. copy the source into the appropriate source members
    in these 3 files.
    f. ADDLIBLE GVEMAIL
    g. CRTPF FILE(GVEMAIL/EMAIL) RCDLEN(72) TEXT('Email +
    Transmision file')
    h. CRTRPGPGM PGM(QUSRSYS/XFMTEM) SRCFILE(GVEMAIL/QRPGSRC) +
    SRCMBR(*PGM)
    i. CRTCLPGM PGM(QUSRSYS/EMAILC) SRCFILE(GVEMAIL/QCLSRC) +
    SRCMBR(*PGM) TGTRLS(V4R2M0)
    (higher releases will be OK too!)
    j. CRTCMD CMD(QUSRSYS/EMAIL) PGM(*LIBL/EMAILC) +
    SRCFILE(GVEMAIL/QCMDSRC)

    18. The command is set up with some defaults which you may want to
    change:

    The default addressee is "support@genesisv.com". To change this
    use the command
    CHGCMDDFT CMD(GVEMAIL/EMAIL) NEWDFT('TO(xxx@yyy.com)')

    The default source file for messages is QTEMP/QMSG. You might want
    to set up a default source file for messages in a common area
    and change the default to use this:
    CRTSRCPF QUSRSYS/QMSG TEXT('E-mail messages')
    CHGCMDDFT CMD(GVEMAIL/EMAIL) NEWDFT('FILE(QUSRSYS/QMSG)')

    19. If you have problems and need any more info on setting up TCP/IP
    and other related issues, try going to:
    http://www.easy400.ibm.it/tcpcfgs



Discussions similaires

  1. [AC-2013] Confection d une base envoie de mail par outlook
    Par taz devil dans le forum Access
    Réponses: 27
    Dernier message: 04/07/2015, 17h33
  2. Envoi de mail par SQL
    Par lucazzo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2010, 09h57
  3. [PL/SQL] Envoi de mail
    Par Nounoursonne dans le forum SQL
    Réponses: 18
    Dernier message: 23/09/2006, 23h45
  4. [Mail] newsletter, envoi de mail par lot
    Par jexl dans le forum Langage
    Réponses: 9
    Dernier message: 08/09/2005, 16h44
  5. modifier planification d'une tache par une procedure stockée
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/08/2005, 15h14

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