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++Builder Discussion :

Ouvrir simplement Outlook. [OLE]


Sujet :

C++Builder

  1. #21
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Normalement le separateur entre les adresses est le " ; "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  2. #22
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    Merci Blondelle pour tout les champs. Je me demande ou tu as trouvé tout ca. Sur la FAQ VBA j'ai pu lire qu'une correspondance était fournis par Micro$oft dans le data d'Office.

    Dans mon cas C:\Program Files (x86)\Microsoft Office\Office12\1036\VBALIST.XLS
    Mais dedans CC n'y est pas !!!

    Le séparateur ";" ne déplais pas a outlook.

    La fonction Send fonctionne si je fait une conversion explicite en WideString.

    Il me reste une seule exception a contourner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	vobjNewMail.OleFunction("Display");
        vobjNewMail.OleFunction(WideString("Display"));
    Ces lignes me renvoyent :
    "Fonction incorrect."
    Que je fasse la conversion en WideSring ou pas. Display ne semble pas etre une fonction qu'il connaisse. Pourtant la fenetre du nouveau mail n'apparait a l'ecran qu'apres le passage de cette fonction.
    Pensant qu'il s'aggisse d'une fonction qui ai pu changé de nom j'ai essayé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	vobjNewMail.OleFunction(WideString("tumesoule"));
    L’exception se transforme en :
    "Nom inconnu".

    Donc Display doit etre une fonction connue mais il n'en veut pas. Ou il manque un argument peut etre.

  3. #23
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Pour Cc (copie carbone) il peut y avoir aussi Cci (copie carbone invisible)
    explications trouvees sur le Net
    À
    Destinataires du message dont vous souhaitez spécifier les noms dans la ligne À du message électronique. Si cet argument est vide, Access vous demande de spécifier les noms des destinataires.
    Séparez les noms des destinataires spécifiés dans cet argument (et dans les arguments Cc et Cci) par un point-virgule (;) ou le séparateur de listes défini dans la boîte de dialogue Personnaliser les options régionales sous l'onglet Nombres dans le Panneau de configuration de Microsoft Windows. Si l'application de messagerie ne peut pas identifier les noms des destinataires, le message n'est pas envoyé et une erreur se produit.
    Cc
    Destinataires du message dont les noms doivent figurer dans la ligne Cc (« copie carbone ») du message. Si vous laissez cet argument vide, la ligne Cc du message est vide.
    Cci
    Destinataires du message dont les noms doivent figurer dans la ligne Cci (« copie carbone cachée ») du message. Si vous laissez cet argument vide, la ligne Cci du message est vide.
    Objet
    Objet du message. Ce texte apparaît dans la ligne Objet du message électronique. Si vous ne spécifiez rien dans cet argument, la ligne Objet du message sera vide.
    Texte du message
    Texte à inclure dans le message en plus de l'objet de base de données. Ce texte apparaît après l'objet dans le corps principal du message électronique. Si vous laissez cet argument vide, aucun texte supplémentaire n'est inclus dans le message. Si vous laissez les arguments Type d'objet et Nom d'objet vides, vous pouvez utiliser cet argument pour envoyer un message sans objet de base de données.
    pour " Display " essaye " StringToOleStr(Display) "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  4. #24
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Comme exemples pour programmer une fonction il y a l'aide en ligne VBA pour Outlook la FAQ Outlook et Delphi
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #25
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    Oui se sont des ces faq que j'essaye de m'aider. Mais je comprend pas trop le delphy.

    Sinon en fait send fonctionne que partiellement.

    Si j'envoie seulement send j'ai une exeption : "Opération abandonnée."

    Mais si je fait le display suivis du send, le display renvoie une exeption mais le mail part correctement.

    Pour les test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    vobjNewMail.OleFunction(StringToOleStr(Display)) ; // ne se compile pas
    vobjNewMail.OleFunction(StringToOleStr("Display"));// renvoie une erreur de compilation pour ambiguité
    [BCC32 Erreur] UtilisezOutlook.cpp(46): E2015 Ambiguïté entre '_fastcall System::StringToOleStr(const System::AnsiStringT<0>) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\System.hpp:1339' et '_fastcall System::StringToOleStr(const System::UnicodeString) at c:\program files (x86)\embarcadero\rad studio\9.0\include\windows\rtl\System.hpp:1340'
    Contexte d'analyseur complet
    UtilisezOutlook.cpp(39): analyse : bool UseOutlook::Envoyez(System::WideString,System::WideString,System::WideString,Vcl::Stdctrls::TMemo *)

  6. #26
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Si apres Display tu met un point " . " est que tu a un affichage te proposant des options
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #27
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vobjNewMail.OleFunction(L"Display.");
    renvoie une exception. "Inconnu"

    Et au pays des Unicode voici quelque conversion curieuse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    vobjNewMail = vMSOutlook.OleFunction(L"CreateItem", 0); //valide
    vobjNewMail = vMSOutlook.OleFunction(WideString("CreateItem"), 0); //valide
    vobjNewMail.OleFunction(L"Send"); //valide
    vobjNewMail.OleFunction(WideString("Send")); //valide
     
    vEspaceDeNom = vMSOutlook.OleFunction("GetNameSpace",WideString("MAPI"));//valide
    vEspaceDeNom = vMSOutlook.OleFunction("GetNameSpace",L"MAPI"); //INVALIDE !!!!
    Certaine fonction accepte tres bien le L"xxx" et d'autre ne supporte que l'opérateur de cast explicite .... j'y comprend plus rien.

  8. #28
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Apparament il vaut mieux choisir WideString ce qui uniformisera le code, tu ne m'a pas dit si apres Display tu pose un point si une boite de diagologue s'ouvre
    vobjNewMail.OleFunction("Display.
    si oui il faut choisir dans la liste proposee
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #29
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    En fait j'avais pas compris la question. Tu voulais dire si builder me propose une suite qd je tappe un . dans l'éditeur.

    La réponse ne serait pas pertinente moi mémé je n'ai jamais compris. Y'a des jours ou il me propose tout ce qui se présente a moi dans une class comme membre ou fonction de la classe. Mais en ce moment il me propose plus rien. Peut importe le code il me propose plus les choix qui s'offre a moi comme avant.

  10. #30
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Les joies de l'informatique
    Je regarde si je trouve quelque chose
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #31
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    J'ai pu essayé sur des version 2003 de office, et display ne renvoie aucune erreur. Tout se passe bien

    Et defois que ca serve voici les source au final d'un class toute simple qui envoie des mail automatiquement en utilisant outlook :

    le .H :
    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
    #ifndef UtilisezOutlookH
    #define UtilisezOutlookH
    #include <System.Classes.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <utilcls.h>
    class UseOutlook
    {
    	private :
    		Variant vMSOutlook, vEspaceDeNom, vDossierReception, olFolderInbox;
    		Variant  vobjNewMail, chemin;
    	public  :
    		bool Envoyez(WideString dest, WideString copie, WideString sujet, TMemo* contenue) ;
    		UseOutlook() ;
    		OuvrirOutlook() ;
    		~UseOutlook() ;
    };
    //---------------------------------------------------------------------------
    #endif
    et le cpp :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    //---------------------------------------------------------------------------
     
    #pragma hdrstop
     
    #include "UtilisezOutlook.h"
     
    #pragma package(smart_init)
    UseOutlook::UseOutlook()
    {
    vMSOutlook= vEspaceDeNom= vDossierReception= olFolderInbox=vobjNewMail= chemin = Unassigned ;
     
    }
    //---------------------------------------------------------------------------
    UseOutlook::~UseOutlook()
    {
    	//destructeur qui ferme outlook
    	vEspaceDeNom.OleFunction("Logoff");
    	vMSOutlook.OleFunction("Quit");
    }
    //---------------------------------------------------------------------------
    UseOutlook::OuvrirOutlook()
    {
    	//ouvre outlook
    	try
    	{
    		//cherche si outlook est deja ouvert
    		vMSOutlook = Variant::GetActiveObject("Outlook.Application");
    	}
    	catch(...)
    	{
    		//sinon on l'ouvre
    		vMSOutlook = Variant::CreateObject("Outlook.Application");
    	}
    	vEspaceDeNom = vMSOutlook.OleFunction("GetNameSpace",WideString("MAPI"));
    }
    //---------------------------------------------------------------------------
    bool UseOutlook::Envoyez(WideString dest, WideString copie, WideString sujet, TMemo *contenue)
    {
    	//la pour envoyer le message
    	vobjNewMail = vMSOutlook.OleFunction(L"CreateItem", 0);
    	vobjNewMail.OlePropertySet("Body",WideString(contenue->Lines->Text));
    	vobjNewMail.OlePropertySet("Subject", sujet);
    	vobjNewMail.OlePropertySet("To", dest);
    	vobjNewMail.OlePropertySet("Cc", copie);
    	vobjNewMail.OleFunction(WideString("Display"));
    	try
    	{
    		//essaye d'envoyer
    		vobjNewMail.OleFunction(L"Send");
    		Sleep(1000);//le temps que la validation outlook apparaisse.
    		return true ;
    	}
    	catch(...)
    	{
    		// si exeption on considére que le mail n'est pas parti
    		throw ;
    		return false ;
    	}
    	//le mail est parti
     
    }

  12. #32
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Verifie dans l'aide en ligne visual basic de la version qui refuse " Display " soit cela n'existe plus soit cela a ete remplace
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  13. #33
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Apres avoir regarde le lien suivant
    La fonction Display a peut etre un parametre suplementaire
    vobjNewMail.OleFunction(WideString("Display"), false);
    A essayer
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  14. #34
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Points : 59
    Points
    59
    Par défaut
    Apres avoir essaye un peut n'importe quoi avec display, tout fonctionne sous office 2003 et rien a faire sous office 2007 ou 2010. C'est pas grave j'utiliserais un vieux poste sous office 2003. Merci pour tout tes messages Blondelle.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Ouvrir simplement un fichier distant ?
    Par thierry.d dans le forum NetBeans
    Réponses: 0
    Dernier message: 04/04/2011, 10h58
  2. impossible d'ouvrir microsoft outlook
    Par bendesarts dans le forum Outlook
    Réponses: 1
    Dernier message: 14/06/2010, 19h51
  3. ouvrir le outlook de PDA ou l'emulateur
    Par dourid9 dans le forum C#
    Réponses: 0
    Dernier message: 12/09/2009, 18h23
  4. Réponses: 5
    Dernier message: 17/04/2008, 11h53
  5. ouvrir contact outlook depuis un formulaire
    Par patgame dans le forum Modélisation
    Réponses: 4
    Dernier message: 21/08/2007, 00h13

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