Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
Voici une petite problématique mesdames et messieurs ;o)
Je désire donner la possibilité aux utilisateurs de l'application que je développe en PB d'envoyer des emails via Outlook.
Pour cela, j'ai un item menu qui permet d'ouvrir une fenêtre Outlook avec des données pré-renseignées (sujet, corps du mail).
Voici le code qui gère cela:
... //Creates a new mail Item lole_item = lole_outlook.CreateItem(0) //Set the subject line of message lole_item.Subject = ls_sujet_entier //Body of mail message lole_item.Body = ls_audi_txt lole_item.Display //displays the message lole_outlook.disconnectobject() ...
Tout cela fonctionne sans problème.
Par contre je désire pré-renseigner également l'expéditeur
J'ai essayé de mettre
lole_item.From = "toto@toto.fr"
comme j'avais vu qu'il existait
lole_item.To = "toto@toto.fr"
pour définir le destinataire mais cela ne fonctionne pas
Quelqu'un sait s'il est possible de réaliser cela avec PowerBuilder V7?
Dernière modification par vincenteraptor (19-07-2007 15:40:45)
Hors ligne
Bonjour et bienvenu,
as-tu regardé dans le Browser d'objets PB ? en principe tu peux retrouver la liste des propriétés et méthodes de l'objet
peut-être qu'il y a un "setter" du genre :
lole_item.SetFrom("toto@toto.fr")
Hors ligne
Très bonne idée (je ne connaissait même pas le Browser ;o) )!
Malheureusement je n'ai pas trouvé mon bonheur.
En effet, j'utilise apparemment des propriétés (Subject, Body, etc) de l'objet lole_item. J'ai parcouru le Browser mais impossible de retrouver un objet de type "Item" pour avoir la liste des propriétés ou la fonction "CreateItem(0)".
J'ai été dans l'onglet OLE, puis j'ai regardé les objets liés à Outlook mais rien de lié au code que j'ai utilisé.
Voici une copie de l'endroit où j'ai cherché (j'ai fait un export RTF de la liste):
Microsoft Office Outlook Recipient Control Class Information Functions Microsoft Office Outlook Rich Format Control Class Information Functions Microsoft Office Outlook View Control Class Information Properties OleObject ActiveFolder boolean DeferUpdate boolean EnableRowPersistance string Filter string FilterAppend string Folder long ItemCount string Namespace OleObject OutlookApplication string Restriction datetime SelectedDate OleObject Selection string View string ViewXML Events Activate() BeforeViewSwitch(string newView, boolean Cancel) SelectionChange() ViewSwitch() Functions AddressBook() AddToPFFavorites() AdvancedFind() Categories() CollapseAllGroups() CollapseGroup() CustomizeView() DeferUpdate(boolean DeferUpdate) Delete() EnableRowPersistance(boolean EnableRowPersistance) ExpandAllGroups() ExpandGroup() Filter(string Filter) FilterAppend(string FilterAppend) FlagItem() Folder(string Folder) ForceUpdate() Forward() GoToDate(string newDate) GoToToday() GroupBy() MarkAllAsRead() MarkAsRead() MarkAsUnread() MoveItem() Namespace(string Namespace) NewAppointment() NewContact() NewDefaultItem() NewDistributionList() NewForm() NewJournalEntry() NewMeetingRequest() NewMessage() NewNote() NewOfficeDocument() NewPost() NewTask() NewTaskRequest() Open() OpenSharedDefaultFolder(string bstrRecipient, int FolderType) PrintItem() Reply() ReplyAll() ReplyInFolder() Restriction(string Restriction) SaveAs() SendAndReceive() ShowFields() Sort() SynchFolder() View(string dispidMember) ViewXML(string ViewXML)
Et je ne retrouve même pas les propriétés Subject, Body, etc...
Est ce que je cherche au bon endroit?
Hors ligne
c'est quoi l'objet OLE que tu instancie :
lole_outlook.ConnectToNewObject ( "nom de l'ole" )
Hors ligne
C'est
lole_outlook = create oleobject li_rc = lole_outlook.ConnectToNewObject("outlook.application")
J'ai trouvé la liste des propriétés dans une documentation Visual Basic:
'Utilisation de l'objet MailItem 'La méthode CreateItem permet de créer un objet MailItem qui représente un nouveau message électronique. L'exemple suivant montre 'comment créer et afficher un nouveau message. Set myOlApp = CreateObject("Outlook.Application") Set myItem = myOlApp.CreateItem(olMailItem) myItem.Display 'Pour renvoyer un seul objet MailItem d'un dossier Boîte de réception, utilisez la propriété Items(index), où index est le numéro d'index d'un 'message électronique ou une valeur correspondant à la propriété par défaut d'un message. L'exemple suivant montre comment définir le dossier 'en cours comme Boîte de réception et afficher le deuxième message électronique du dossier. Set myOlApp = CreateObject("Outlook.Application") Set myNamespace = myOlApp.GetNamespace("MAPI") Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox) myFolder.Display Set myItem = myFolder.Items(2) myItem.Display 'Remarques 'Si un programme tente de faire référence à un type d'informations de destinataire en utilisant le modèle d'objet Outlook, une boîte de dialogue 'vous demande de confirmer l'accès à ces informations. Vous avez la possibilité d'autoriser l'accès au Carnet d'adresses ou aux informations de 'destinataire jusqu'à dix minutes après l'affichage de la boîte de dialogue. Cela permet à certaines fonctionnalités, telles que la synchronisation 'des périphériques, d'être exécutées jusqu'à la fin. 'La boîte de dialogue de confirmation s'affiche lorsqu'une solution tente d'accéder via un programme aux propriétés suivantes de l'objet MailItem : 'SentOnBehalfOfName 'SenderName 'ReceivedByName 'ReceivedOnBehalfOfName 'ReplyRecipientNames 'To 'CC 'BCC 'Body 'HTMLBody 'Recipients 'SenderEmailAddress
Il existe bien la propriété "SenderEmailAddress" mais elle n'est accessible qu'en lecture :-(
Donc visiblement, il est impossible de gérer l'envoi de mail en définissant un expéditeur. Il faut que je regarde pour une autre solution, j'ai vu qu'il existait des fonctionnalités d'envoi de mail par "MAPI". Quelqu'un a-t-il déjà utilisé cela ? Si oui, avec définition de l'expéditeur ?
Hors ligne
Bonjour,
Je sais que ma réponse est plutôt tardive, mais étant moi-même confronté au problème je vous donne la solution que j'ai trouvée pour choisir le compte de l'expéditeur du mail.
Long ll_inc, ll_max, ll_find String ls_name, ls_adresse, ls_user ll_max = lole_outlook.session.accounts.count ll_find = 0 FOR ll_inc = 1 TO ll_max ls_name = lole_outlook.session.accounts.item(ll_inc).DisplayName // Libellé du compte Outlook ls_adresse = lole_outlook.session.accounts.item(ll_inc).SmtpAddress // Adresse mail du compte Outlook ls_user =lole_outlook.session.accounts.item(ll_inc).UserName // Nom de l'utilisateur IF Trim(lower(ls_adresse)) = Trim(Lower("xxxx@xxx.fr")) THEN ll_find = ll_inc Exit END IF NEXT IF ll_find > 0 THEN lole_item.SendUsingAccount = lole_outlook.session.accounts.item[ll_find] /********* display the message ********/ //lole_item.Display() /****** send the message *********/ lole_item.Send() END IF
Thierry
Dernière modification par PAUTONNIER (02-04-2015 13:29:43)
Hors ligne