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

SQL Procédural MySQL Discussion :

Envoi de mail à travers un trigger et un UDF ecrit en c


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Envoi de mail à travers un trigger et un UDF ecrit en c
    Bonjour,
    Quelqu'un peut-il m'aider à écrire et exécuter une fonction en C sous mysql pour l'envoi de mail?

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    tu dois normalement passer par l'activation des UDF, mais leur façon d'expliquer l'intégration des UDF en c est pas terrible j'avoue...

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Merci Eric
    Mais comment activer les fonctions utilisateurs? Et si possible j'aimerais avoir des directives pour développer la fonction qui me permettra d'envoyer des mails avec mysql.
    Cordialement

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    vu la pauvreté de la documentation mysql je te conseille de lire cette documentation et les autres sous-chapitres...


  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    J'ai finalement eu un code que j'ai compilé et copié dans la librairie /usr/lib/mysql/plugin, mais à chaque fois que j'essaie de créer la fonction il m'affiche l'erreur suivante:
    #1126 - Can't open shared library 'mymail.so' (errno: 22 /usr/lib/mysql/plugin/mymail.so: failed to map segment from shared object: Permission denied)

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    ça ne serait pas dû à un problème de droits sur ton dossier ou le fichier, ça, pour l'utilisateur mysql qui appelle le processus mysql?

  7. #7
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    j'y ai pensé mais je ne sais pas comment le vérifier?

  8. #8
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    avec le logiciel de ftp qui t'as permis de mettre le fichier de la fonction dans le répertoire

  9. #9
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    en fait je travaille en local sous ubuntu

  10. #10
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    sois tu utilises le navigateur graphique de fichier de ton environnement graphique alors

    soit dans une console tu utilises la commande cd pour aller dans le dossier puis un ls pour lister les fichiers et là tu regardes si toutes les options sont identiques pour eux

  11. #11
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    sois tu utilises le navigateur graphique de fichier de ton environnement graphique alors

    soit dans une console tu utilises la commande cd pour aller dans le dossier puis un ls pour lister les fichiers et là tu regardes si toutes les options sont identiques pour eux
    J'ai tout verifié et meme ajouté l'utilisateur mysql au groupe root mais rien n'a changé.J'ai toujours la même erreur.

  12. #12
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    ça te donne quoi comme valeur pour les droits?

  13. #13
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Voici les droits affichés:

    -rw-r--r-- 1 root      root        42014 2011-02-10 08:53 ha_example.a
    -rw-r--r-- 1 root      root         1002 2011-02-10 08:53 ha_example.la
    lrwxrwxrwx 1 root      root           19 2011-04-18 14:01 ha_example.so -> ha_example.so.0.0.0
    lrwxrwxrwx 1 root      root           19 2011-04-18 14:01 ha_example.so.0 -> ha_example.so.0.0.0
    -rw-r--r-- 1 root      root        21964 2011-02-10 08:55 ha_example.so.0.0.0
    -rw-r--r-- 1 root      root      1919790 2011-02-10 08:53 ha_innodb_plugin.a
    -rw-r--r-- 1 root      root         1044 2011-02-10 08:53 ha_innodb_plugin.la
    lrwxrwxrwx 1 root      root           25 2011-03-31 09:58 ha_innodb_plugin.so -> ha_innodb_plugin.so.0.0.0
    lrwxrwxrwx 1 root      root           25 2011-03-31 09:58 ha_innodb_plugin.so.0 -> ha_innodb_plugin.so.0.0.0
    -rw-r--r-- 1 root      root      1252128 2011-02-10 08:55 ha_innodb_plugin.so.0.0.0
    -rwxrwxrwx 1 root      root         7041 2011-07-01 10:41 mymail.so
    Le fichier se nomme mymail.so, il est dans le dossier /usr/lib/mysql/plugin/

  14. #14
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    ça peut venir des répertoires où tu la mets ou de la typographie du nom, car linux est sensible à la casse...

    lis ça, le mec parle des udf (c'est en anglais) pour une installation sous windows, mais c'est facilement transposable

  15. #15
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    J'ai finalement trouvé la solution. Il fallait éditer le fichier suivant /etc/apparmor.d/usr.sbin.mysqld et y ajouter cette ligne /usr/lib/mysql/plugin/* rm,.
    Le problème a été résolu mais je n'ai pas compris l'objectif de la manœuvre. Apparemment, apparmor était à l'origine du problème.

    Merci ERIC pour tes suggestions.

  16. #16
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    cool tu peux passer en résolu alors

  17. #17
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Pas de résultat après l'execution de la fonction
    Bonjour,
    je reviens encore.
    En fait l'UDF mymail.c provient d'ici.
    Je l'ai compilé et copié dans le dossier /usr/lib/mysql/plugin afin que mysql puisse le loader. La fonction mymail a été créée et je l'exécute sans erreur. Mais lorsque je vérifie le fichier mail.log, je constate que le mail n'a pas été envoyé, même pas de trace de l'envoi. On a l'impression qu'aucune fonction mail n'a été exécutée.

    Merci d'avance pour votre aide

  18. #18
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    y a des trucs bizarres dans sa fonction...

    exemple:
    Code c/c++ : 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
    my_bool	mymail_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
    {
      if (!(args->arg_count == 2 && args->arg_type[0] == STRING_RESULT && args->arg_type[1] == STRING_RESULT))
      {
        strncpy(message, ERRPARM, MYSQL_ERRMSG_SIZE);
        return 1;
      }
     
      initid->maybe_null = 1;
      initid->ptr = (char*) malloc(0);
      if(initid->ptr==NULL)
      {
        strncpy(message, ERRMEM, MYSQL_ERRMSG_SIZE);
        return 1;
      }
      return 0;
    }
    Le type prend une structure UDF_INIT en entrée... se fout de la valeur du pointeur et la remplace par celle d'un malloc(0) qui retourne 0 ou null donc... il teste juste en dessous si c'est null et si oui dit qu'il y a une erreur ou ne fait rien sinon...
    donc cette fonction renvoie toujours une erreur en théorie soit due au premier if, soit si lui n'a rien déclenché... drôle de fonction d'initialisation

    dans celle de désinstallation, il fait un free sur une valeur sans s'assurer qu'elle n'est pas null et ne va donc pas provoquer une erreur (faut dire qu'on s'assure qu'elle est null dans celle d'initialisation)

    bref à revoir sérieusement je pense...

  19. #19
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Aide moi à y mettre de l'ordre stp. J'en ai urgemment besoin

  20. #20
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    le vrai code nettoyé est ici

    la doc sur comment implémenter une UDF et les sous-fonctions optionnelles selon le contexte d'utilisation

    si tu as besoin d'explications pour bien comprendre certaines choses, contacte moi en mp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. envoi de mail à travers un proxy
    Par jadawin_fr dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 02/12/2013, 16h32
  2. Envoi de mail à travers mon adresse yahoo.
    Par casho dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/01/2009, 18h40
  3. Envoi e-mail à travers exchange 2003
    Par mitsh666 dans le forum VBScript
    Réponses: 3
    Dernier message: 30/07/2007, 16h21
  4. Envoi de Mail par Delphi au travers d'Outlook
    Par bidson dans le forum Delphi
    Réponses: 7
    Dernier message: 08/10/2006, 20h30

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