Normalement le separateur entre les adresses est le " ; "
Normalement le separateur entre les adresses est le " ; "
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
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 :
Ces lignes me renvoyent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 vobjNewMail.OleFunction("Display"); vobjNewMail.OleFunction(WideString("Display"));
"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 :
L’exception se transforme en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part vobjNewMail.OleFunction(WideString("tumesoule"));
"Nom inconnu".
Donc Display doit etre une fonction connue mais il n'en veut pas. Ou il manque un argument peut etre.
Pour Cc (copie carbone) il peut y avoir aussi Cci (copie carbone invisible)
explications trouvees sur le Net
pour " Display " essaye " StringToOleStr(Display) "À
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.
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
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
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 :
[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'
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é
Contexte d'analyseur complet
UtilisezOutlook.cpp(39): analyse : bool UseOutlook::Envoyez(System::WideString,System::WideString,System::WideString,Vcl::Stdctrls::TMemo *)
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
renvoie une exception. "Inconnu"
Code : Sélectionner tout - Visualiser dans une fenêtre à part vobjNewMail.OleFunction(L"Display.");
Et au pays des Unicode voici quelque conversion curieuse :
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.
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 !!!!
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
si oui il faut choisir dans la liste proposeevobjNewMail.OleFunction("Display.
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
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.
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
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 :
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 #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
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 }
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
Apres avoir regarde le lien suivant
La fonction Display a peut etre un parametre suplementaire
A essayervobjNewMail.OleFunction(WideString("Display"), false);
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager