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

Langage Delphi Discussion :

Erreur MAPI, composant TMAPIMail (smComponent)


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut Erreur MAPI, composant TMAPIMail (smComponent)
    Bonjour,

    Nouveau poste (W10) à installer hier et problème : un programme qui jusque-là fonctionnait correctement sur tous les autres postes n'arrive pas à envoyer les mails par MAPI !
    Au départ je me suis dit : "problème programme de mail avec aucune adresse par défaut" mais non, ce n'est pas la cause pour preuve un autre programme qui lui aussi envoi des mails par MAPI fonctionne, idem un nouveau programme de test basique aussi
    Plus dingue encore, j'ai utilisé l'unité de ce test basique dans le programme récalcitrant et le test basique ne fonctionne pas non plus

    Environnement programme D3, donc programme 32 bits, cible un poste Windows10 64 bits, le composant utilisé pour l'IMAP est un composant de smComponent TMAPIMail. Oui, c'est de la maintenance. L'erreur MAPI renvoyée est toujours un nombre positif mais jamais la même

    Vu les tests, difficile de mettre en cause le fait que ce soit un programme D3, que ce soit du 32 bits ou même le lecteur mail par défaut (Thunderbird) je donne ma langue au chat quant à la cause.

    Pour pallier cette erreur rapidement j'aimerais pouvoir envoyer les informations (destinataires, piecejointe, corps du message) à un autre programme (lancé par shellexecute ou autre) mais je n'ai pas la moindre idée de piste pour réaliser ça une idée ?

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    MAPI est une très vieille API qui est limitée et présente souvent des défaillances...son seul intérêt (quand elle fonctionne) c'est qu'il n'existe pas d'alternative simple pour tous les logiciels

    ceci dit, j'utilise maintenant une autre approche, tu composes ton mail, par exemple avec TidMessage, et au lieu d'utiliser TidSMTP pour l'envoyer, tu l'enregistres dans un fichier .eml sur lequel tu fais un ShellExecute.

    De plus, si tu ajoutes une entête X-Unsent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      idMessage1.ExtraHeaders.Add('X-Unsent: 1');
      IdMessage1.SaveToFile('test.eml');
    cela indique au client mail de l'ouvrir directement pour l'envoyer...sauf que évidemment Thunderbird ne gère pas cet attribut, sauf à ajouter une extension https://github.com/lieser/X-Unsent

    le gros avantage de cette approche c'est que ton mail peut contenir virtuellement n'importe quoi, du HTML, des pièces jointes, des tableaux en fait tout ce que peux contenir un mail...alors que MAPI c'est du texte brut avec éventuellement des pièces jointes
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    MAPI est une très vieille API qui est limitée et présente souvent des défaillances...
    Ben le programme l'est aussi, vieux. L'étrange est dans la défaillance unique avec ce programme mais pas avec un autre tout aussi vieux

    Intéressante ton approche mais qui dit Tidxxxxxx dit post Delphi 3 donc, inutilisable dans mon cas du moins à première vue.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Ça avance, dans le sens où, maintenant j'ai une erreur "acceptable" :
    User cancelled request
    même si je n'en comprends pas la raison

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Peut-être qu'une sous-couche du TMAPIMail (smComponents, c'est comme du même éditeur smExport ou smImport : scalabium, car ça je pratique)

    Cela utilise une couche IP en dessous qui peut être pertubé par une autre lib IP dans le même programme (genre comme le GStack de Indy commun à plusieurs classes)
    Ou cela encapsule juste
    MAPISendMail, MapiLogOn

    Je vais surement m'intéresser par curiosité à MAPIReadMail prochainement
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 596
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    @ShaiLetTroll a priori c'est juste une encapsulation des commandes que tu cites.
    J'ai donc essayé également de passé en direct avec MAPI : même effet, toujours un "user cancelled request" alors que l'unité dans un programme indépendant fonctionne
    La seule différence semble résider dans le fait que dans le programme indépendant la forme est la seule unité et que dans celui qui me pose soucis c'est une forme modale.
    Moult essais ce weekend ne m'ont pas permis de voir en quoi le fait qu'elle soit modale change la donne (sachant que tous les autres postes de l'entreprise s'en accommode à quelques différences près)

    Comme il s'agit d'un programme que je ne peux pas migrer (du moins dans l'immédiat) je songe passer par une commande ShellExecute d'un programme spécifique (puisque, isolé, l'envoi fonctionne) en lui passant les paramètres nécessaires : une adresse mail, le nom du fichier à ajouter en pièce jointe (<< ce qui fait que je ne peux utiliser emailto).


    Pour bien faire il faudra aussi que je mette en paramètre le texte du message mais ça je n'ai jamais tenté, est-il possible de passer un TStringList comme paramètre ?

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/03/2011, 10h42
  2. [Lazarus] [Win XP][TCOMPORT] Erreur SIGFPE composant ComTerminal
    Par prc_600 dans le forum Lazarus
    Réponses: 3
    Dernier message: 27/07/2009, 20h35
  3. Message d'erreur: Un composant ActiveX ne peut pas créer un objet
    Par amnass dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/05/2009, 07h12
  4. Erreur du composant WebPart
    Par develop2007 dans le forum SharePoint
    Réponses: 1
    Dernier message: 03/08/2008, 22h50
  5. Traitement erreur IdSocketError Composant Indy
    Par goldkey dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/06/2005, 12h11

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