03. maj 2004 - 09:49Der er
5 kommentarer og 1 løsning
Fange Outlook-hændelser fra andet program
Hey,
Jeg ønsker at gennem en kopi af alle mails, som er sendt via min applikation. Det sker ved at jeg sender en erklærer et Outlook-objekt WithEvents, hvorved jeg kan benytte outlook's egen send-hændelse til at gemme filen. Derved gemmes kun mail som rent faktisk ER sendt og ikke de mail, som er blevet annulleret inden.
På min form virker denne kode:
'<<--- kode start --->> Private WithEvents OutL As Outlook.Application
Public Function CreateMail() As Boolean Dim Item As MailItem Dim Receiver As Recipient
Set OutL = New Outlook.Application
Set Item = OutL.CreateItem(olMailItem)
With Item .BodyFormat = olFormatHTML .HTMLBody = "Dette er en test" .Subject = "Mails" .FlagStatus = olFlagMarked .Recipients.Add "tj@makeiteasy.dk"
.Display End With Set Item = Nothing End Function
Public Sub OutL_ItemSend(ByVal Item As Object, Cancel As Boolean) Item.SaveAs "C:\" & Item.Subject & ".msg", olMSG End Sub '<<--- Kode slut --->>
Men jeg vil jo gerne pakke det lidt pænere ind i et modul, så jeg ikke skal lægge denne kode på alle forms. WithEvents virker kun på klassemoduler, hvorfor jeg har lagt kode i sådan et og kalder klassemodulet "SendMail".
Herefter vil jeg kalde modulet således:
Public Function Maildemo() Dim Mail As SendMail Set Mail = New SendMail Mail.CreateMail End Function
Mailen bliver genereret og sendt, men hændelsen OutL_ItemSend bliver aldrig trigget?
Det kan da ikke passe, at der ikke er nogen blandt danmarks bedste Visual basic-hajer, som kender lidt til WithEvents og brugen af hændelser denne vej!!???
Jeg vover et gæt. Din Maildemo allokerer et SendMail-objekt, sender en mail, og returnerer straks. Hvis eventet ikke kommer med det samme, men er lidt forsinket, er objektet, som skulle modtage eventet, nedlagt. For at afprøve det kunne du prøve at holde live i SendMail-objektet lidt længere og se om eventet kommer.
Løsningen kunne være at lave et statisk Outlook.Application-objekt i stedet for at oprette ét hver gang CreateMail bliver kaldt.
Pas dog på med din nye kode - hvis du kalder Maildemo flere gange, og eventet fra det foregående kald ikke er kommet endnu, så går det galt igen fordi det gamle SendMail-objekt nedlægges og dermed Outlook.Application-objektet. Hvis du skal være helt sikker skal du måske oprette et Outlook.Application objekt een gang for alle (ved opstart eller første kald) og så aldrig igen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.