COMatePLUS Tobit David eine Mail schreiben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

COMatePLUS Tobit David eine Mail schreiben

Beitrag 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

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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?
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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'")
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag von kunstlust »

Ich habe zu danken, darauf kann ich nun aufbauen Kiffi. :bounce:
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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()

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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) + ")")
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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
a²+b²=mc²
Benutzeravatar
kunstlust
Beiträge: 259
Registriert: 12.04.2012 23:47
Wohnort: Hannover
Kontaktdaten:

Re: COMatePLUS Tobit David eine Mail schreiben

Beitrag 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?
Antworten