Seite 1 von 2

COMatePLUS Tobit David eine Mail schreiben

Verfasst: 21.05.2012 14:47
von kunstlust
Ich habe hier noch einen Coderest gefunden, welche ich etwas angepasst habe, was ich nicht verstehe, warum die Betreff und der Body nicht übergeben werden, das ist noch ein Fehler drin, habt Ihr einen Tip für mich? Danke :D

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"

Define oDavidApp.COMateObject
Define oDavidAccount.COMateObject
Define oDavidArchive.COMateObject
Define oDavidMessageItems.COMateObject
Define oDavidMsgItem.COMateObject

oDavidApp = COMate_CreateObject("DVOBJAPILib.DvISEAPI")
If oDavidApp = 0 : MessageRequester ("", "David.fx muss geöffnet sein") : End : EndIf

oDavidAccount=oDavidApp\GetObjectProperty("Logon('', '', '', '', '', 'AUTH')")

If oDavidAccount = 0 
  MessageRequester(Str(oDavidAccount),"Logon Error")
  oDavidApp\Release() : oDavidApp = 0
  End
Else
  ;MessageRequester(Str(oDavidAccount),"Logon geht")
EndIf


#DvArchivePersonaOut=102  ;Hab ich in der dvapi32.pbi gefunden

oDavidArchive=oDavidAccount\GetObjectProperty("GetSpecialArchive("+Str(#DvArchivePersonaOut)+")")  

If oDavidArchive = 0 
  MessageRequester(Str(oDavidArchive),"GetSpecialArchive Error")
  oDavidAccount\Release(): oDavidAccount = 0
  oDavidApp\Release() : oDavidApp = 0
  End
Else
  ; MessageRequester(Str(oDavidArchive),"GetSpecialArchive okay")
EndIf

; Set oMessageItems = oArchive.AllItems 
oDavidMessageItems=oDavidArchive\GetObjectProperty("AllItems")  

If oDavidMessageItems = 0 
  MessageRequester(Str(oDavidMessageItems),"AllItems Error")
  oDavidArchive\Release(): oDavidArchive = 0
  oDavidAccount\Release(): oDavidAccount = 0
  oDavidApp\Release() : oDavidApp = 0
  End
Else
  ;MessageRequester(Str(oDavidMessageItems),"AllItems okay")
EndIf

oDavidMsgItem = oDavidArchive\GetObjectProperty("NewItem(2)")
oDavidMsgItem\GetObjectProperty("Recipients\Add('lr', 'MAIL', 'Test')")
oDavidMsgItem\GetObjectProperty("Subject = 'Ich komme aus Purebaic'+"); Wird nicht übergeben

oDavidMsgItem\GetObjectProperty("BodyText\PlainText = 'Ich bin der Text aus aus Purebaic'"); Wird nicht übergeben

oDavidMsgItem\GetObjectProperty("Send")


oDavidMessageItems\Release(): oDavidMessageItems = 0
oDavidArchive\Release(): oDavidArchive = 0
oDavidAccount\Release(): oDavidAccount = 0
oDavidApp\Release() : oDavidApp = 0


Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 21.05.2012 15:08
von Kiffi
ganz klar! Weil sowohl im Betreff als auch im Body 'Purebaic' steht. Das mag PB überhaupt nicht. <)

Grüße ... Kiffi

P.S.: GetObjectProperty beim Setzen eines Wertes?

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 21.05.2012 15:18
von kunstlust
Das wollte ich nicht.... mit dem "s"

Aber welche Funktion muss ich nun für die das Senden nutzen, ich habe die Unterschiede der Objekte noch nicht so verstanden...
In AutoIt ist das egal, darum habe ich noch so meine Startprobleme, bitte dies zu entschuldigen ;-)
oDavidMsgItem\........("Subject = 'Ich bin eine Mail aus PureBasic'")

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 21.05.2012 15:47
von Kiffi
Generell:

Wenn Du einen Wert auslesen willst, verwendest Du obj\Get...() und wenn Du einen Wert setzen willst, obj\Set...().

Wenn Du was ausführen willst (ohne Werte zu lesen oder zu setzen), verwendest Du obj\Inkoke()

demzufolge müsste es wie folgt heißen:

Code: Alles auswählen

oDavidMsgItem\SetProperty("BodyText\PlainText = 'Ich bin der Text aus aus Purebaic'")
und

Code: Alles auswählen

oDavidMsgItem\GetObjectProperty("Send")
solltest Du der Vollständigkeit halber ändern in

Code: Alles auswählen

oDavidMsgItem\Invoke("Send")
(kenne DVOBJAPILib.DvISEAPI nicht. Deshalb: Ohne Gewähr)

Kleiner Tipp noch: Wenn irgend ein COMate-Befehl nicht wie erwartet funktioniert,
einfach mal ein Debug COMate_GetLastErrorDescription() dahinterhängen. I.d.R. steht
dann da, was schief gelaufen ist.

Grüße ... Kiffi

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 21.05.2012 15:51
von kunstlust
Ich habe zu danken, darauf kann ich nun aufbauen Kiffi. :bounce:

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 22.05.2012 08:22
von kunstlust
Jetzt habe ich noch eine Frage, soweit es mehrer Objekte sind, wie z.B. das lokale Adressbuch, sollte doch die Funktion "GetNextObject" genutzt werden oder? Bei mir geht das nicht und ich verstehe nicht warum nicht... Ich habe mal die beiden Codes PB und AutoIT hier angeben, die AutoIT Funktion wird mir ein einfache auf der Console ausgeben, so hätte ich das auch gerne im Debug bei PB.

AutoIT:

Code: Alles auswählen

$oApp = ObjCreate("DVOBJAPILib.DvISEAPI")
$oAcc = $oApp.Logon("","","","","","NOAUTH")
$ArrAdr = $oAcc.localAddressBook
$Anzahl = $ArrAdr.count
Dim $array[$Anzahl][2]
Dim $intern[1]

 For $i = 1 To $Anzahl - 1
  $Adr = $ArrAdr($i)
 ConsoleWrite($Adr.DisplayName&": "& $Adr.EMAIL&@lf)
 Next

PB:

Code: Alles auswählen

XIncludeFile "COMatePLUS.pbi"

Define oDavidApp.COMateObject
Define oDavidAccount.COMateObject
Define oDavidArchive.COMateObject
Define oDavidMessageItems.COMateObject
Define oDavidMsgItem.COMateObject
Define oDavidAdress.COMateObject

oDavidApp = COMate_CreateObject("DVOBJAPILib.DvISEAPI")
If oDavidApp = 0 : MessageRequester ("", "David.fx muss geöffnet sein") : End : EndIf

oDavidAccount=oDavidApp\GetObjectProperty("Logon('', '', '', '', '', 'AUTH')")

If oDavidAccount = 0 
  MessageRequester(Str(oDavidAccount),"Logon Error")
  oDavidApp\Release() : oDavidApp = 0
  End
Else
  ;MessageRequester(Str(oDavidAccount),"Logon geht")

oDavidAdress = oDavidAccount\GetObjectProperty("localAddressBook") 
oAnzahl = oDavidAdress\GetIntegerProperty("count"); der Count ist vile zu hoch....

For t = 1 To oAnzahl
  Debug oDavidAdress\GetObjectProperty("Email")
  ;oDavidAdress\GetNextObject(); diese Funktion kennt Purebasic nicht
  Next
EndIf
Debug COMate_GetLastErrorDescription()


Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 22.05.2012 08:40
von Kiffi
oDavidAdress\GetIntegerProperty("count") sollte eigentlich die richtige Anzahl
zurückgeben. Du musst dann aber nur darauf achten, dass Du in der
For-Next-Schleife von 0 bis oAnzahl - 1 zählst (wg. 0-basiert).

innerhalb der Schleife musst Du den Schleifenzähler mit angeben:

Code: Alles auswählen

Debug oDavidAdress\GetObjectProperty("Email(" + Str(oAnzahl) + ")")
GetNextObject() brauchst Du dann nicht.

Grüße ... Kiffi

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 22.05.2012 09:23
von kunstlust
Er sagt leider immer Method/property not supported by this object.
ich habe es mal ohne Schleife versucht, so:

Code: Alles auswählen

Debug oDavidAdress\GetObjectProperty("Email(" + Str(2) + ")")

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 22.05.2012 09:45
von Kiffi
ok, versuch's mal so:

Code: Alles auswählen

Define oAddress.COMateObject
[...]
oAddress = oDavidAdress\GetObjectProperty("Item(" + Str(2) + ")")
Debug oAddress\GetStringProperty("EMail")
in oDavidAdress befindet sich Dein Adressbuch mit n Items.
mit GetObjectProperty("Item(...)") kannst Du einen Adressaten ermitteln
und dann kannst Du mit GetStringProperty() die Mail-Adresse des Adressaten auslesen.

(so verstehe ich das zumindest)

Grüße ... Kiffi

Re: COMatePLUS Tobit David eine Mail schreiben

Verfasst: 22.05.2012 10:44
von kunstlust
Nun bekomme ich "DvISE: Bad Parameter" als Ausgabe der "COMate_GetLastErrorDescription" und
Debug oAddress\GetStringProperty("Email") bringt einen Speicherfehler.
Das mit dem Item ist der richtige Weg, daran hätte ich auch denken könne, aber ist der Weg über "CreateEnumeration" nicht besser?
Bei dem WMI Demo der COMate sieht das so aus, als könne ich dies auch für meine Objekte nutzen?