2008-09-18 11 views
7

Pourquoi mon D2009 exe produit-il des emails avec des pièces jointes nommées ATTnnnnn.DAT lorsque le même code source compilé dans D2007 produit des emails avec des pièces jointes correctement nommées avec le nom de fichier d'origine? J'utilise les bibliothèques respectives Indy fournies avec D2007 et D2009. Ne pas avoir le nom de fichier d'origine sur la pièce jointe empêche les utilisateurs d'être en mesure de double-cliquer sur la pièce jointe pour l'ouvrir (généralement les pièces jointes sont des feuilles de calcul Excel).Pourquoi mon D2009 exe produit-il des pièces jointes nommées ATTnnnnn.DAT

Remarque: le code est identique - juste le compilateur et les bibliothèques Indy varient. La pièce jointe envoyée par le D2009 exe peut être enregistrée et renommée pour dire zzzz.xls, puis s'ouvre correctement - c'est-à-dire que l'email et la pièce jointe passent correctement - c'est juste le nom du fichier pièce jointe qui est foiré. Quelqu'un a suggéré que les en-têtes de pièces jointes sont endommagés. Est-ce que Indy a été brisé? Le code à reproduire est le code standard stock que l'on peut trouver sur de nombreux sites Web, mais je peux poster si nécessaire. Merci d'avance.

Répondre

0

Je crains que vous ayez juste besoin de remonter dans le code indy. Indy a eu un certain nombre de bugs dans le passé, donc cela pourrait être la cause. Si vous tracez dans vous devriez le trouver assez rapidement.

0

La propriété IdAttachment.Filename a-t-elle été définie? Il est possible que, entre les versions d'Indy, ils aient changé le fonctionnement de Filename.

7

J'ai trouvé le problème - s'il vous plaît voir la liste de diffusion de adug.com.au pour exacts détails de la solution, mais en résumé - la version d'Indy qui vient avec D2009 (version 10.2.5) a 2 erreurs dans l'unité IdMessageClient.pas dans deux lignes qui définissent le nom = et filename = dans la pièce jointe de traitement (un numéro de ligne est 1222 de la mémoire et l'autre est quelques lignes plus tôt; désolé, je suis à la maison maintenant; J'ai réparé les choses ce soir au travail). L'absence de ces points-virgules provoque la formation incorrecte de l'en-tête de pièce jointe et Outlook génère un nom propre pour la pièce jointe.

La solution consiste à sortir un point-virgule (;) avant de sortir le nom = ou filename = tokens. Alors Indy a besoin d'être reconstruit.

Je compare la D2007 version Indy (10.1.5) et peut le voir met toujours le point-virgule à la fin de la ligne Content-Type évitant ainsi le problème qui a glissé dans la version incluse avec D2009.

+0

Merci d'avoir partagé ça! – robsoft

0

Les recommandations de Richard ont fonctionné pour moi. J'ai comparé les sources de message d'un attachement correct et celui d'Indy. Mettez les points-virgules derrière Content-type et Content-disposition (autour de la ligne 1220 en effet, et cela fonctionne.Merci Richard!