03. maj 2004 - 09:49 Der 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?

Hvad gør jeg galt?

Pfh tak
Thomas Jepsen
04. maj 2004 - 12:57 #1
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!!???

Nå, men så sparer jeg da de 200 point.

Vi lader billedet stå et øjeblik...
Avatar billede venne Nybegynder
05. maj 2004 - 09:54 #2
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.
05. maj 2004 - 10:33 #3
hmm, det er bare mærkeligt, at det virker på en form, men ikke i et klassemodul.

Jeg vil dog prøve det med at holde outlook.application i luften lidt længere. Vender tilbage senere...
05. maj 2004 - 16:31 #4
venne->det er jo klart!!

funktionen:
Public Function Maildemo()
    Dim Mail As SendMail
    Set Mail = New SendMail
    Mail.CreateMail
End Function

...skal selvfølgelig have "Dim Mail as SendMail" erklæret på module-niveau således:

Dim Mail As SendMail
Public Function Maildemo()
    Set Mail = New SendMail
    Mail.CreateMail
End Function


Så virker det :o)

Smid et svar og 200 point er dine :o)
Avatar billede venne Nybegynder
06. maj 2004 - 09:28 #5
Jamen det var jo godt ;)

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.
06. maj 2004 - 09:31 #6
ok, det vil jeg prøve at kigge på :o)

Tak for hjælpen!

/Thomas
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester