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

4D Discussion :

Envoi Pièce Jointe par Mail via 4D


Sujet :

4D

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut Envoi Pièce Jointe par Mail via 4D
    Bonjour à tous,

    Voic mon problème :
    J'ai créé une vitrine Web de mon application 4D. Depuis cette vitrine, je voudrais envoyer un mail et une pièce jointe. Pas de problème pour le formulaire et la récupération du fichier. Je teste cela en local...tout fonctionne parfaitement.
    Le problème, c'est que mon application est en client/serveur. Dans ma méthode d'envoi, je récupère le chemin du fichier à envoyer et du coup, ce chemin n'existe pas sur le serveur.
    Je ne sais vraiment pas comment procéder et je me demande même si cela est réalisable via 4D.

    J'ai trouvé certains scripts PHP qui permettaient l'envoi de mail avec pièce jointe mais j'aimerais éviter ce langage.
    Quelqu'un a-t'il une piste ? Une solution Javascript peut-être ?

    Merci
    Maxime

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Points : 613
    Points
    613
    Par défaut
    Hello,

    les documents et chemins vers ces documents sont propres à la machine, donc en local. Pour aller chercher un document sur le serveur, tu dois utiliser la commande Executer sur serveur. Puis lire le contenu de la variable avec LIRE VARIABLE PROCESS ou stocker le document dans un champ Blob.

    Ou utiliser un dossier partagé et y accéder avec un chemin de type "\\machine_serveur\dossier\document".
    --Steph4D

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut
    Merci Steph, mais j'ai du mal à comprendre ta méthode.
    Je ne vois pas comment utiliser les fonctions executer sur serveur et LIRE VARIABLES PROCESS car l'utilisateur n'est pas en 4D Client mais en Web.
    Actuellement, lorsque je soumets mon formulaire d'envoi de fichier, je fais un <form action="/4DACTION/Ma_Méthode/" method="post">...</form> et j'envoie le chemin de mon fichier.
    En clair, est-il possible grâce à un langage Internet (Javascript, PHP, ou autre...) d'envoyer le contenu de mon fichier au lieu du chemin ?

    Merci
    Maxime

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Points : 613
    Points
    613
    Par défaut
    Ah pardon, j'avais pas tout bien capté...

    Le fichier est envoyé via un formulaire web dans une variable de type blob (vZeBlobFile par exemple). Le serveur web reçoit cette variable de type blob. La méthode compilerWeb contient la déclaration du blob C_BLOB(vZeBlobFile).
    Pour récupérer le fichier, il faut transformer ce blob en fichier. Mais le blob peut contenir le header, le type et le nom de fichier. Il faut donc parser le contenu du blob pour en extraire le fichier.

    Tu peux regarder l'article "Récupérer un fichier depuis un formulaire Web" :
    Solutions4D.com/, dans Base de connaissances, rechercher avec "formulaire web" comme titre.

    Le livre de David Adams "The 4D Web Companion" pourrait t'être utile... J'ai trouvé un extrait de sa méthode de récupération de fichier, publié sur un forum 4D :

    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
    ` ************************************************
    ` Copy out 1K from the top of the BLOB, enough to read the header
    data.
    ` ************************************************
    C_ENTIER LONG($offset_index)
    C_TEXTE($headerData_t)
     
    $headerData_t:=""
    $offset_index:=0
    $headerData_t:=BLOB vers texte(TONBOLB;Texte sans longueur
    ;$offset_index;1024)
     
    ` ************************************************
    ` Remove everything from the original BLOB except the document.
    ` ************************************************
    C_ENTIER LONG($fileDataBreak_position)
    C_ENTIER LONG($fileDataStarts_position)
     
    C_ALPHA(4;$CRLF2_s)
     
    $CRLF2_s:=Caractere(Retour chariot )+Caractere(Retour à la ligne
    )+Caractere(Retour chariot )+Caractere(Retour à la ligne )
    $fileDataBreak_position:=Position($CRLF2_s;$headerData_t)
    Si ($fileDataBreak_position>0)
    $fileDataStarts_position:=$fileDataBreak_position+4
    ` Clear the header stuff.
    SUPPRIMER DANS BLOB(TONBOLB;0;$fileDataStarts_position-1) ` -1 because
    BLOB offsets start at 0.
    Fin de si
     
    ` End of routine.
    HTH!
    --Steph4D

  5. #5
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 59

    Informations forums :
    Inscription : Juin 2006
    Messages : 72
    Points : 95
    Points
    95
    Par défaut
    Salut,

    tu peux envoyer un fichier au navigateur avec ce genre de chose (modification de l'entête HTTP) :

    $type:="application/vnd.ms-excel"**`"application/pdf"
    ?Chemin:=document `le chemin de ton document
    FERMER DOCUMENT($Doc)

    TABLEAU TEXTE($tabChamps;4)
    TABLEAU TEXTE($tabValeurs;4)
    $tabChamps{1}:="X-VERSION"
    $tabChamps{2}:="X-STATUS"
    $tabChamps{3}:="Content-type"
    $tabChamps{4}:="Content-disposition"
    $tabValeurs{1}:="HTTP/1.1"
    $tabValeurs{2}:="200 OK"
    $tabValeurs{3}:="application/vnd.ms-excel"
    $tabValeurs{4}:="attachment; filename=MonFichier_.xls"
    FIXER ENTETE HTTP($tabChamps;$tabValeurs)

    DOCUMENT VERS BLOB(?Chemin;$blob)
    ENVOYER BLOB HTML($blob;$Type)

    Si ton objectif est de récupérer un fichier qui se trouve sur le poste du navigateur, la méthode de Steph est la bonne.

    A+

    Denis

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Il y a quelques temps, j'avais envoyé une demande pour envoyer un fichier vers le serveur 4D via un navigateur.
    Steph m'avait répondu et mon problème était résolu. Cependant, aujourd'hui, je souhaiterais envoyer une image sur le même principe.

    La méthode est-elle la même ?
    J'ai juste rajouté un IMAGE vers BLOB dans la méthode mais ca ne semble pas fonctionner.

    Merci
    Maxime

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Points : 613
    Points
    613
    Par défaut
    Hello,

    oui, la méthode est la même.

    J'ai fait un petit test :

    Le formulaire web avec lequel j'envoye un fichier jpg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      <form action="/4DACTION/send_blob/" method="post" enctype="multipart/form-data">
    	<input type="text" name="zeName"><br>
    	<input type="file" name="FichierEnvoye"><br>
    	<input type="submit" name="envoyer">
      </form>
    Les méthodes projet 4D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      `-- méthode Compiler_WEB
    C_BLOB(FichierEnvoye)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      `-- méthode send_blobC_TEXTE($0)
     
    $refdoc:=Creer document("test.txt")
    FERMER DOCUMENT($refdoc)
    BLOB VERS DOCUMENT(document;FichierEnvoye)
     
    DA_blobParsing (FichierEnvoye)
     
    ENVOYER TEXTE HTML("fichier envoye!")
    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
      `-- méthode DA_blobParsing
     
      ` Code provenant du livre de David Adams "The 4D Web Companion"
      ` Modifié par ST pour les besoins du test (25/10/2007)
     
     
      ` ************************************************
      ` Copy out 1K from the top of the BLOB, enough to read the headerdata.
      ` ************************************************
    C_ENTIER LONG($offset_index)
    C_TEXTE($headerData_t)
    C_BLOB($1)
     
    zeBLOB:=$1
     
    $headerData_t:=""
    $offset_index:=0
    $headerData_t:=BLOB vers texte(zeBLOB;Texte sans longueur ;$offset_index;1024)
     
      ` ************************************************
      ` Remove everything from the original BLOB except the document.
      ` ************************************************
    C_ENTIER LONG($fileDataBreak_position)
    C_ENTIER LONG($fileDataStarts_position)
     
    C_ALPHA(4;$CRLF2_s)
     
    $CRLF2_s:=Caractere(Retour chariot )+Caractere(Retour à la ligne )+Caractere(Retour chariot )+Caractere(Retour à la ligne )
     
      ` ------------- ajout ST 04/10/2007
      ` récupérer le nom du fichier
    $ChaineAChercher:="filename="+Caractere(Guillemets )
    $DebutFileName:=Position($ChaineAChercher;$headerData_t)+Longueur($ChaineAChercher)
    $FinFileName:=Position("Content-Type:";$headerData_t)-3
    $FileName:=Sous chaine($headerData_t;$DebutFileName;$FinFileName-$DebutFileName)
      `//
     
    $fileDataBreak_position:=Position($CRLF2_s;$headerData_t)
    Si ($fileDataBreak_position>0)
    	$fileDataStarts_position:=$fileDataBreak_position+4
    	  ` Clear the header stuff.
    	SUPPRIMER DANS BLOB(zeBLOB;0;$fileDataStarts_position-1)  ` -1 because BLOB offsets start at 0.
    Fin de si 
     
      ` ------------- ajout ST 25/09/2007
      ` créer, sur le serveur, le document envoyé par le navigateur
    $refdoc:=Creer document($FileName)
    FERMER DOCUMENT($refdoc)
    BLOB VERS DOCUMENT(document;zeBLOB)
      ` //
     
     
      ` End of routine
    J'ai alors dans le dossier de la base un fichier .txt avec le contenu "brut" du blob réceptionné (entêtes + type + contenu du fichier) et le fichier lui-même correspondant au fichier envoyé par le navigateur au serveur.
    --Steph4D

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2013, 12h59
  2. [AC-2010] Envoi PDF + pièces jointes par mail
    Par renard700 dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/06/2012, 20h25
  3. Envoie une pièce jointe par mail en RPGle
    Par Lisogane dans le forum AS/400
    Réponses: 2
    Dernier message: 03/03/2011, 17h57
  4. XBAP - Envoi de pièce jointe par mail
    Par YHDVP dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 22/10/2009, 16h56
  5. [Mail] Envoi du contenu d'une pièce jointe par mail
    Par nonhosonno dans le forum Langage
    Réponses: 2
    Dernier message: 28/02/2007, 13h42

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