CoMatePlus Outlook E-Mails auslesen möglich ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
IceBite
Beiträge: 2
Registriert: 19.07.2019 13:54

CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von IceBite »

Hallo,

ich wollte mal so allgemein fragen ob es möglich ist E-Mails in CoMate auszulesen und diese dann z.b. in einer Liste anzuzeigen ?


so in etwa:

Code: Alles auswählen

Private Sub CommandButton2_Click()

    Dim fMails As Object, mail As Object, txtContent As String, arrContent As Variant, objExcel As Object, wb As Object, sheet As Object, rngStart As Object, rngCurrent As Object, objOL As Object, fErledigt As Object

    ' Outlook Object erzeugen
    Set objOL = CreateObject("Outlook.Application")
    
    'Ordner in Outlook referenzieren
    Set fMails = objOL.Session.Stores.Item("e@mail").GetRootFolder.folders.Item("Posteingang")
    'Unterordner referenzieren in den die Mails verschoben werden wenn sie bearbeitet wurden
    
    
    If fMails.Items.Count > 0 Then

        'Workbook setzen
        Set wb = ActiveWorkbook

        'Daten kommen in erstes Worksheet
        Set sheet = wb.Worksheets(1)

        'Startzelle in Spalte A ermitteln
        Set rngStart = sheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Set rngCurrent = rngStart

        For Each mail In fMails.Items

            'Body extrahieren
            txtContent = mail.Body
            MsgBox mail.Subject
            
        Next
    Else
        MsgBox "Keine Mails zum Bearbeiten im Ordner", vbExclamation
    End If

    Set objOL = Nothing
    Set wb = Nothing
    Set sheet = Nothing
    Set mail = Nothing
    
End Sub
freue mich auf jede Antwort.

MfG IceBite
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von RSBasic »

Ja, es ist möglich, aber ich habe mit PB-CoMate noch nie so richtig gearbeitet.
Geht es dir nur darum, die E-Mails aus einem IMAP- oder POP3-Konto auszulesen?
Alternativ könntest du auch folgende Bibliothek verwenden: viewtopic.php?f=11&t=31435
Ansonsten kannst du im Forum nach "comate outlook" suchen. Soweit ich weiß gibt es irgendwo einen fertigen Beispielcode.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
IceBite
Beiträge: 2
Registriert: 19.07.2019 13:54

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von IceBite »

RSBasic hat geschrieben:Ja, es ist möglich, aber ich habe mit PB-CoMate noch nie so richtig gearbeitet.
Geht es dir nur darum, die E-Mails aus einem IMAP- oder POP3-Konto auszulesen?
Alternativ könntest du auch folgende Bibliothek verwenden: viewtopic.php?f=11&t=31435
Ansonsten kannst du im Forum nach "comate outlook" suchen. Soweit ich weiß gibt es irgendwo einen fertigen Beispielcode.
Nein sondern ein anderes Programm läuft neben Outlook und ich kann emails aus einer liste auswählen unddiese sollen dann in das programm importiert werden
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8677
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von NicTheQuick »

Mal eine vielleicht blöde Frage: Wie funktioniert das CoMatePlus genau? Ich meine es wäre doch ein riesige Sicherheitslücke, wenn ein fremdes Programm einfach so Mails abgreifen könnte. Das muss doch bestimmt erst in Outlook registriert werden oder sowas.
Bild
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von mk-soft »

COMate verwendet die vorhandenen Schnittstellen von den registrierten DLL´s mit späte Bindung.
Also das Interface IDispatch und somit wie es mit VB-Script oder VBA funktioniert.
Der Benutzer es Programm muss natürlich die Berechtigung auf dem PC haben.

Du kannst auch mit frühe Bindung arbeiten. Dazu hat Purebasic auch schon einige viele Interfaces bereits deklariert.

Wenn du ein funktionierendes Beispiel in VBS oder Java hast, kannst du auch ActiveScript verwenden...
Link: Module ActiveScript

P.S.
Habe das gefunden... Aber kein Outlook installiert
Function unread_mails()
'Funktion zum überprüfen auf neue Mails im Ordner "Posteingang"
'In Variable "u" wird die Anzahl der ungelesenen Nachrichten übergeben

Dim unread_items, mapi, inbox, mail

Set outObj = CreateObject("Outlook.Application")

u = 0 'Zähler ungelesene Nachrichten zurücksetzen

Set mapi = outObj.GetNamespace("MAPI")
Set inbox = mapi.GetDefaultFolder(6) 'Zeiger auf Posteingang setzten - Posteingang = Folder(6)

For Each mail In inbox.Items 'überprüfen auf ungelesene Mails
If mail.unread Then unread_items = unread_items + 1
Next

'Ausgabe als Msgbox
MsgBox "Sie haben " & unread_items & " ungelesene Mails in Ihrem Posteingang", vbOKOnly, "Posteingang überprüft"

End Function

Link: https://hope-this-helps.de/serendipity/ ... n-289.html
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von Shardik »

IceBite hat geschrieben:ich wollte mal so allgemein fragen ob es möglich ist E-Mails in CoMate auszulesen und diese dann z.b. in einer Liste anzuzeigen ?
Ich habe das folgende Beispiel erfolgreich getestet unter Windows 10 x64 Version 1809 mit PB 5.70 x86 und x64 und Outlook 2016 32-Bit. Vor dem ersten Start ist unbedingt der Verzeichnispfad zu COMatePLUS.PBI anzupassen.

Code: Alles auswählen

EnableExplicit

#olFolderInbox = 6

; ----- Maximale Anzahl an E-Mails, die aus Outlook ausgelesen werden sollen
#MaxCount = 50

XIncludeFile "Verzeichnispfad/zu/COMatePLUS.PBI" ; <== Anpassen!

Structure EMailEntry
  ReceiveDate.S
  Sender.S
  Subject.S
EndStructure

Define EMailsIncomplete.I

NewList EMail.EMailEntry()

Procedure GetEMailInfosFromInbox(List EMail.EMailEntry())
  Shared EMailsIncomplete.I

  Protected EMail.COMateObject
  Protected EMailCount.I
  Protected i.I
  Protected Inbox.COMateObject
  Protected Items.COMateObject
  Protected NameSpace.COMateObject
  Protected Outlook.COMateObject

  Outlook = COMate_CreateObject("Outlook.Application")
  
  If Outlook
    NameSpace = Outlook\GetObjectProperty("GetNamespace('MAPI')")
    
    If NameSpace
      Inbox = NameSpace\GetObjectProperty("GetDefaultFolder('" +
        #olFolderInbox + "')")
      
      If Inbox
        Items = Inbox\GetObjectProperty("Items")
        
        If Items
          EMailCount = Items\GetIntegerProperty("Count")
          
          If EMailCount > 0
            If EMailCount > #MaxCount
              EMailCount = #MaxCount
              EMailsIncomplete = #True
            EndIf

            For i = 1 To EMailCount
              EMail = Inbox\GetObjectProperty("Items(" + i + ")")
            
              If EMail
                AddElement(EMail())
                EMail()\ReceiveDate = FormatDate("%dd.%mm.%yyyy %hh:%ii",
                  EMail\GetDateProperty("ReceivedTime"))
                EMail()\Subject = EMail\GetStringProperty("Subject")
                EMail()\Sender = EMail\GetStringProperty("SenderName")
                EMail\Release()
              EndIf
            Next i
          EndIf
          
          Items\Release()
        EndIf
        
        Inbox\Release()
      EndIf
      
      NameSpace\Release()
    EndIf
    
    Outlook\Release()
  EndIf
EndProcedure

OpenWindow(0, 0, 0, 600, 218, "",
  #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) -20,
  "Empfangsdatum", 100, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Absender", 159)
AddGadgetColumn(0, 2, "Betreff", 300)

GetEMailInfosFromInbox(EMail())

If EMailsIncomplete
  SetWindowTitle(0, "Die aktuellsten " + #MaxCount +
    " E-Mails in Outlooks Posteingang")
Else
  SetWindowTitle(0, "E-Mails in Outlooks Posteingang: " + ListSize(EMail()))
EndIf

ForEach EMail()
  With EMail()
    AddGadgetItem(0, -1, \ReceiveDate + #LF$ + \Sender + #LF$ + \Subject)
  EndWith
Next

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Oliver13
Beiträge: 35
Registriert: 08.05.2010 15:49

Re: CoMatePlus Outlook E-Mails auslesen möglich ?

Beitrag von Oliver13 »

Wenn man enthaltene Anlagen speichern will:

Code: Alles auswählen

Procedure GetEMailInfosFromInbox(List EMail.EMailEntry())
  Shared EMailsIncomplete.I

  Protected EMail.COMateObject
  Protected EMailCount.I
  Protected i.I
  Protected Inbox1.COMateObject
  Protected Inbox.COMateObject
  
  Protected Items.COMateObject
  Protected NameSpace.COMateObject
  Protected Outlook.COMateObject
  Protected Attachments.COMateObject
  Protected Attachment.COMateObject
  
  Outlook = COMate_CreateObject("Outlook.Application")
 
  If Outlook
    NameSpace = Outlook\GetObjectProperty("GetNamespace('MAPI')")
    Protected sprop$="GetDefaultFolder('" +     #olFolderInbox + "')"
    If NameSpace
      Inbox = NameSpace\GetObjectProperty(sprop$)
      If Inbox
        Items = Inbox\GetObjectProperty("Items")
       
        If Items
          EMailCount = Items\GetIntegerProperty("Count")
          If EMailCount > 0
            If EMailCount > #MaxCount
              EMailCount = #MaxCount
              EMailsIncomplete = #True
            EndIf
            For i = 1 To EMailCount
              EMail = Inbox\GetObjectProperty("Items(" + i + ")")
              If EMail
                AddElement(EMail())
                EMail()\ReceiveDate = FormatDate("%dd.%mm.%yyyy %hh:%ii",
                  EMail\GetDateProperty("ReceivedTime"))
                EMail()\Subject = EMail\GetStringProperty("Subject")
                EMail()\Sender = EMail\GetStringProperty("SenderName")
                 Attachments = Email\GetObjectProperty("Attachments")
                  Protected iAttachments=Attachments\GetIntegerProperty("Count")
                  Protected iAttachItem.i
                  Protected sfilename.s
                 For iAttachItem = 1 To iAttachments
                   Attachment = Attachments\GetObjectProperty("Item(" + iAttachItem + ")")
                  If attachment
                   sfilename= Attachment\GetStringProperty("FileName") 
                    Attachment\Invoke("SaveAsFile('"+sfilename+"')")
                    Attachment\Release()
                Endif
                Next
                  Attachments\Release()
                EMail\Release()
              EndIf
            Next i
          EndIf
          Items\Release()
        EndIf
        Inbox\Release()
      EndIf
      NameSpace\Release()
    EndIf
    Outlook\Release()
  EndIf
EndProcedure
Antworten