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

C++ Discussion :

[E-Mail] MIME codage (base64?) pour piece jointe en PDF


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut [E-Mail] MIME codage (base64?) pour piece jointe en PDF
    Bonjour,

    Je souhaite envoyer un mail avec pièce jointe depuis mon appli C++ sans passer par une librairie (indy, TNMSMTP ou autre).

    J'ai attrapé un peu de code sur le net (basé sur les sockets) qui semble plutot bien fonctionner sans pièce jointe. Le code est ici : http://www.iprelax.fr/smtp/smtp_prog6.php

    Le but principal étant d'envoyer une pièce jointe (en pdf), j'ai adapté l'entête pour inclure le type MIME. la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process( "Subject: Yeah !!!\r\n\r\nEt voici un petit mail !\r\n.\r\n" );
    est remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process( "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"separateur\"\r\n\r\n--separateur\r\nContent-Type: text/plain;charset=\"us-ascii\"\r\nContent-Transfer-Encoding: 7bit\r\n\r\nceci est un message au format texte.\r\n\r\n--separateur\r\nContent-Type: application/pdf;nname=\"D:\\texte.txt\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;filename=\"texte.txt\"\r\n\r\n\"Q2VjaSBlc3QganVzdGUgdW4gcGV0aXQgdGVzdCAhCg\"--separateur--\r\n.\r\n");
    Lorsqu'il s'agit d'un fichier texte, ca se passe presque bien (j'arrive à ouvrir le fichier recu, il y a juste quelques caractères indésirables en fin de fichier).

    Mais dès que je souhaite envoyer un pdf, je ne parviens pas à l'ouvrir à la réception et il fait pas la même taille que le fichier d'origine. Est ce que cela pourrait venir de l'encodage (base64) ?

    Merci de vos conseils

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    ca ressemble plus à un problême de boundaries....

    essayes déjà d'écrire la chaine sous la forme:
    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
     
    const char* data =
     "MIME-Version: 1.0\r\n"
     "Content-Type: multipart/mixed; boundary=\"separateur\"\r\n\"
     "\r\n"
     "--separateur\r\n"
     "Content-Type: text/plain;charset=\"us-ascii\"\r\n"
     "Content-Transfer-Encoding: 7bit\r\n"
     "\r\n"
     "ceci est un message au format texte.\r\n"
     "\r\n"
     "--separateur\r\n"
     "Content-Type: application/pdf;nname=\"D:\\texte.txt\"\r\n"
     "Content-Transfer-Encoding: base64\r\n"
     "Content-Disposition: attachment;filename=\"texte.txt\"\r\n"
     "\r\n"
     "\"Q2VjaSBlc3QganVzdGUgdW4gcGV0aXQgdGVzdCAhCg\""
     "--separateur--\r\n"
     ".\r\n"
     ;
    En particulier le dernier separateur me semble étrange (mais ca fait longtemps que j'ai pas touché du direct MIME mail )

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Est-ce que ton PDF est bien réencodé en base64 comme indiqué?

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    nicroman : Le dernier séparateur a pirori doit se terminer par deux tirets...

    3DArchi : Pour l'encodage, j'ai utilisé une fonction trouvée sur le même site que le reste :
    http://www.iprelax.fr/mime/mime_prog2.php

    Comment est ce que je peux savoir s'il a bien été encodé sachant qu'il en devient illisible? A la réception, le fichier pdf fait 400 Octets (il en faisait 11kO au départ) et le message d'erreur est : "Une erreur est survenue lors de l'ouverture de ce document. Le fichier est endommagé et n'a pas pu être réparé"

    A noter que pour l'envoyer, je l'encode donc en base64 puis je le lis tel un fichier texte (fopen, fread) et j'envoie tous les caractères que je lis.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par lhpp Voir le message
    3DArchi : Pour l'encodage, j'ai utilisé une fonction trouvée sur le même site que le reste :
    http://www.iprelax.fr/mime/mime_prog2.php
    Je ne connais pas, mais j'imagine que ça doit être fiable Sinon, il existe aussi celui-ci.

    Citation Envoyé par lhpp Voir le message
    Comment est ce que je peux savoir s'il a bien été encodé sachant qu'il en devient illisible?
    L'encodage base64 n'est pas très compliqué. Tu peux regarder sur les premiers octets si c'est cohérent. Tu peux vérifier qu'il n'y a que des caractères autorisés. Enfin, tu peux vérifier que les '=' éventuellement positionnés le sont à bon escients.
    Citation Envoyé par lhpp Voir le message
    A la réception, le fichier pdf fait 400 Octets (il en faisait 11kO au départ)
    Là, il y a un problème. La taille d'arrivée doit être égale à la taille de départ, sinon c'est qu'il manque des bouts. Dans le header donné dans le post, tu positionnes l'extension 'txt': normalement, ça ne devrait pas jouer mais méfions nous du client et positionnes 'pdf'
    Citation Envoyé par lhpp Voir le message
    A noter que pour l'envoyer, je l'encode donc en base64 puis je le lis tel un fichier texte (fopen, fread) et j'envoie tous les caractères que je lis.
    fichier texte?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Par défaut
    Merci 3DArchi de tes réponses détaillées. Je vais apporter un peu de précisions.

    Concernant l'encodage base64, effectivement, ca semble plutot correct (pas de caractères bizzare). Pour les "=" bien positionné, j'ai pas très bien compris ta remarque.


    Le code que j'ai donné dans mon entête est en effet un peu erronné. Ce que je donne en paramètre est bien "D:\\fichier.pdf" et "fichier.pdf"


    Concernant la lecture du fichier, je m'explique : a la fin de l'entête, juste avant le "--separateur--\r\n", il faut envoyer le contenu du fichier encodé (la suite de tous les caractères constituant le fichier).
    Dans mon programme, j'ai une méthode qui renvoie une variable de type char*. Cette variable est remplie de la façon suivante : je fais un fopen du fichier pdf encodé et des fread pour lire tous les caractères que je concatène dans la variable.

    Dans l'exemple que je vous ai donné, j'ai simplement ouvert un fichier encodé avec notepad++ et j'ai directement collé son contenu.


    Dernière précision, je remarque que la taille du fichier encodé avant émission est la même que celle du fichier reçu qui aurait du être décodé(environ 400 octets)... la taille du fichier d'origine étant de 11Ko

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

Discussions similaires

  1. [OL-2010] Importation adresses mails a partir d'une piece jointe
    Par asgro dans le forum Outlook
    Réponses: 2
    Dernier message: 05/01/2015, 12h35
  2. envoie mail word en html sans piece jointe
    Par Pexou dans le forum VBA Word
    Réponses: 1
    Dernier message: 21/11/2013, 20h22
  3. [WD17] envoie d'un email avec en piece jointe le pdf de l'état
    Par davcaz dans le forum WinDev
    Réponses: 3
    Dernier message: 15/01/2013, 11h07
  4. [Acces piece jointe] modifier pdf
    Par HeB91 dans le forum SharePoint
    Réponses: 19
    Dernier message: 14/01/2010, 17h14
  5. Piece jointe pour un e-mail
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2006, 09h38

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