Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Neue E-Mails in öffentlichem Ordner

Frage Entwicklung Visual Studio

Mitglied: ahstax

ahstax (Level 2) - Jetzt verbinden

30.07.2013 um 12:59 Uhr, 1786 Aufrufe, 8 Kommentare, 4 Danke

Hallo,

ich versuche, einen Code zu schreiben, der erkennt, dass eine neue (neu eingegangene bzw. seit letztem Programmstart neu hinzugekommene) E-Mail in einem öffentlichen Ordner vorhanden sind.
Später sollen diese dann auch bearbeitet werden (gedruckt, organisiert).

(Outlook 2010, Exchange, Win7, VB 2010 Express)


Für eine normale Inbox scheine ich das (Copy & Paste) hinbekommen zu haben, Panel1 wird grün wenn eine E-Mail eingeht:

01.
Public Class Form1 
02.
 
03.
    Private WithEvents olInboxItems As Microsoft.Office.Interop.Outlook.Items 
04.
     
05.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
06.
        Application_Startup() 
07.
    End Sub 
08.
 
09.
    Private Sub Application_Startup() 
10.
 
11.
        Dim objApp As Microsoft.Office.Interop.Outlook.Application = New Microsoft.Office.Interop.Outlook.Application() 
12.
        Dim objNS As Microsoft.Office.Interop.Outlook.NameSpace = objApp.GetNamespace("mapi") 
13.
        olInboxItems = objNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Items 
14.
        objNS = Nothing 
15.
 
16.
    End Sub 
17.
    Private Sub olInboxItems_ItemAdd1(ByVal Item As Object) Handles olInboxItems.ItemAdd 
18.
        Panel1.BackColor = Color.Green 
19.
    End Sub 
20.
 
21.
    Private Sub cmdBtnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnReset.Click 
22.
        Panel1.BackColor = Color.Empty 
23.
    End Sub 
24.
 
25.
    Private Sub cmdBtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnClose.Click 
26.
        Me.Close() 
27.
    End Sub 
28.
End Class

Bei einem nem Öffentlichen Ordner klappt es (bis jetzt) nicht:

01.
Public Class Form1 
02.
 
03.
    Private WithEvents olInboxItems As Microsoft.Office.Interop.Outlook.Items 
04.
     
05.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
06.
        Application_Startup() 
07.
    End Sub 
08.
    Private Sub Application_Startup() 
09.
 
10.
        Dim objApp As Microsoft.Office.Interop.Outlook.Application 
11.
        Dim objNS As Microsoft.Office.Interop.Outlook.NameSpace 
12.
        Dim objPF As MAPIFolder 
13.
        Dim objAPF As MAPIFolder 
14.
        Dim objMKF As MAPIFolder 
15.
 
16.
        objApp = New Microsoft.Office.Interop.Outlook.Application() 
17.
        objNS = objApp.GetNamespace("MAPI") 
18.
        objPF = objNS.Folders("Öffentliche Ordner - " & objNS.AddressEntry.GetExchangeUser.PrimarySmtpAddress) 
19.
        objAPF = objPF.Folders("Alle Öffentlichen Ordner") 
20.
        objMKF = objAPF.Folders("Ordner_01") 
21.
 
22.
        olInboxItems = objNS.GetPublicFolder(objMKF).Items 
23.
 
24.
    End Sub 
25.
    Private Sub olInboxItems_ItemAdd1(ByVal Item As Object) Handles olInboxItems.ItemAdd 
26.
        Panel1.BackColor = Color.Green 
27.
    End Sub 
28.
 
29.
    Private Sub cmdBtnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnReset.Click 
30.
        Panel1.BackColor = Color.Empty 
31.
    End Sub 
32.
 
33.
    Private Sub cmdBtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnClose.Click 
34.
        Me.Close() 
35.
    End Sub 
36.
End Class

Woran könnte es liegen? Setze ich insgesamt vielleicht falsch an? Wäre ggf NewMail oder NewMailEx ein kleverer Ansatz?

Neugierige Grüße,
Andreas
Mitglied: colinardo
02.08.2013, aktualisiert 04.08.2013
Hallo Andreas,
dein zweites Script kann in dieser Weise nicht funktionieren, da es das Event ItemAdd abfängt welches nur ausgelöst wird wenn du selber im Ordner ein Objekt erstellst.
Wie wäre es, wenn die Mails, die im öffentlichen Ordner auflaufen, automatisch an eine bestimmte Mailbox weitergeleitet werden die du dann mit dem "NewMailEx"-Ereignis abfängst und verarbeitest.

--edit--
alternativ wäre die Entwicklung eines Exchange-Transport-Agents der auf dem Exchange-Server läuft auch eine Lösung.

Grüße Uwe
Bitte warten ..
Mitglied: ahstax
02.08.2013 um 12:24 Uhr
Hallo colinardo,

herzlichen Dank für Deine Antwort.

Ich habe es nach einiger Rumspielerei hinbekommen, dass mir neue E-Mails im öffentlichen Ordner angezeigt werden. Heißt dass, dass ich auf irgend eine mysteriöse Weise alle neuen Mails im öffentlichen Ordner erzeuge?

01.
Imports System 
02.
Imports System.Collections.Generic 
03.
Imports Microsoft.Office.Interop.Outlook 
04.
 
05.
Public Class Form1 
06.
    Public objApp As Microsoft.Office.Interop.Outlook.Application 
07.
    Public objNS As Microsoft.Office.Interop.Outlook.NameSpace 
08.
    Public objPF As MAPIFolder 
09.
    Public objAPF As MAPIFolder 
10.
    Public objMKF As MAPIFolder 
11.
    Public strPublicFolderPath As String 
12.
    Public strPrimarySmtpAddress As String 
13.
 
14.
 
15.
    Private WithEvents olInboxItems As Microsoft.Office.Interop.Outlook.Items 
16.
     
17.
 
18.
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
19.
        lblMailID.Text = "" 
20.
        Application_Startup() 
21.
    End Sub 
22.
 
23.
 
24.
    Private Sub Application_Startup() 
25.
 
26.
        Try 
27.
            objApp = New Microsoft.Office.Interop.Outlook.Application() 
28.
            objNS = objApp.GetNamespace("MAPI") 
29.
 
30.
            'MsgBox(objNS.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress) 
31.
 
32.
            objPF = objNS.Folders("Öffentliche Ordner - " & objNS.CurrentUser.AddressEntry.GetExchangeUser.PrimarySmtpAddress) 
33.
            objAPF = objPF.Folders.Item("Alle Öffentlichen Ordner") 
34.
            objMKF = objAPF.Folders.Item("Ordner 01") 
35.
 
36.
            'MsgBox(strPublicFolderPath) 
37.
 
38.
            olInboxItems = objMKF.Items 
39.
 
40.
        Catch ex As System.Exception 
41.
            MsgBox(ex.Message) 
42.
        End Try 
43.
         
44.
    End Sub 
45.
 
46.
 
47.
    Private Sub olInboxItems_ItemAdd1(ByVal Item As Object) Handles olInboxItems.ItemAdd 
48.
        Panel1.BackColor = Color.Green 
49.
 
50.
        'hier irgendwas mit der lblMailID 
51.
 
52.
    End Sub 
53.
 
54.
 
55.
    Private Sub cmdBtnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnReset.Click 
56.
        Panel1.BackColor = Color.Empty 
57.
    End Sub 
58.
 
59.
    Private Sub cmdBtnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBtnClose.Click 
60.
        Me.Close() 
61.
    End Sub 
62.
 
63.
End Class
Ich würde nun gerne in lblMailID.Text (Zeile 50) die MailID der Mail ausgeben, die das ItemAdd-Event ausgelöst hat. (Das ist nur ein Zwischenschritt, ich möchte später mal die Mail speichern und dann weiterver- und -bearbeiten. Das geht vermutlich nur mit NewMailEx? Damit hatte ich bis jetzt noch keinen Erfolg... Wo kann ich denn vernünftige Infos dazu finden, die ich selbst vielleicht noch nicht gefunden haben?

Neugierige Grüße,
Andreas
Bitte warten ..
Mitglied: colinardo
02.08.2013 um 12:39 Uhr
Heißt dass, dass ich auf irgend eine mysteriöse Weise alle neuen Mails im öffentlichen Ordner erzeuge?
Sorry war mein Fehler, hatte diesbezüglich was anderes im Hinterkopf...
Ich würde nun gerne in lblMailID.Text (Zeile 50) die MailID der Mail ausgeben
Ich denke du meinst mit MailID die EntryID der Mail. Auf das Objekt was hinzugefügt wurde kannst du mit Item zugreifen. Dieses Object wird dem Event ja als Parameter übergeben (Private Sub olInboxItems_ItemAdd1(ByVal Item As Object))
Die EntryID fragst du also so ab:
Item.EntryID
Du solltest aber später noch überprüfen ob das Objekt tatsächlich ein MailItem-Objekt war das übergeben wurde, dies kann mit der Eigenschaft .Class des Objektes tun.

Welche Eigenschaften und Methoden für Outlook-Objekte existieren kannst du entweder Online im MSDN oder in der VBA-Hilfe des VBA-Editors in Outlook nachlesen.

Grüße Uwe
Bitte warten ..
Mitglied: ahstax
02.08.2013 um 12:44 Uhr
Ja, natürlich... EntryID... Entschuldigung.

Ich probier es gleich aus und werde wieder berichten...!
Bitte warten ..
Mitglied: ahstax
02.08.2013 um 13:11 Uhr
hmm....

einfach mit

01.
Private Sub olInboxItems_ItemAdd(ByVal Item As Object) Handles olInboxItems.ItemAdd 
02.
 
03.
        Panel1.BackColor = Color.Green 
04.
 
05.
        Try 
06.
            Dim strEntryID As String = Item.EntryID 
07.
            lblEntryID.Text = strEntryID 
08.
            MsgBox(Item.sendername) 
09.
        Catch ex As System.Exception 
10.
            MsgBox(ex.Message) 
11.
        End Try 
12.
 
13.
    End Sub
funktioniert es leider nicht.
Fehlermeldung:
"ungültiger threadübergreifender Vorgang: Zugriff auf das Steuerelement lblEntryID erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

Allerdings, wenn ich dir EntryID in einer MsgBox ausgebe, gehts. Tut vermutlich nichts zur (eigentlichen) Sache, ist aber (für mich) verwunderlich...
Bitte warten ..
Mitglied: colinardo
02.08.2013 um 14:43 Uhr
Das ist klar, du versuchst aus dem Outlook-Prozess (das ItemAdd-Event gehört auch zu Outlook) ein Steuerelement in einem anderen Prozess (deine Anwendung) zu verändern - das scheitert natürlich weil dies ein illegaler Cross-Thread-Call ist. Dies lässt sich mit Delegates lösen oder du erlaubst in deiner Anwendung Cross-Thread-Calls was aber nicht zum guten Programmier-Stil gehört:
Im Initializer deiner Form dazu folgendes eintragen
01.
Control.CheckForIllegalCrossThreadCalls = false
Bitte warten ..
Mitglied: ahstax
02.08.2013 um 18:02 Uhr
Wenn das Pfui ist, mach ich es nicht...!
Kann man den Wert irgendwie sauber übergeben?

Abgesehen davon:
Bis hierher läufts.

Die neue Mail wird auch schon in nen Ordner gespeichert.
Von dem aus will ich die dann ausdrucken lassen. Mail und Anhänge separat. Und wenn es Anhänge sind, deren Format unbekannt ist, soll ein Ersatzblatt erzeugt werden.
Darf ich mich ggf. wieder melden?

Herzlichen Dank einstweilen!!!!
Bitte warten ..
Mitglied: colinardo
03.08.2013, aktualisiert 04.08.2013
OK das mit den Delegates ist für Anfänger nicht einfach zu verstehen aber hier für dich ein Beispiel für dein Vorhaben:
zuerst deklarierst du den Delegaten (Stellvertreter/Bevollmächtigter) und eine zusätzliche Variable die nachher das neue MailItem enthält in deiner Form-Klasse.
01.
Public Delegate Sub setLabelInfoDelegate() 
02.
Public newIncomingMail As Object = Nothing
dann schreibst du im Item_Add-Ereigniss folgendes hinein:
01.
newIncomingMail = Item 
02.
Dim myDelegate As setLabelInfoDelegate 
03.
myDelegate = AddressOf setLabelInfo 
04.
Invoke(myDelegate)
zusätzlich erstellst du noch folgende Sub in deiner Klasse:
01.
Private Sub setLabelInfo() 
02.
      Try 
03.
          If Not newIncomingMail Is Nothing Then 
04.
             lblMailID.Text = newIncomingMail.EntryID 
05.
          End If 
06.
         Catch ex As SystemException 
07.
            MsgBox(ex.Message) 
08.
       End Try 
09.
End Sub
In dieser Prozedur wird die eigentliche Arbeit in deiner Form gemacht (sie ist quasi die Worker-Prozedur des Delegaten). In dieser kannst du auch noch andere Dinge erledigen die Änderungen an deiner Form setzen müssen.

Klar wenn Probleme auftauchen, einfach melden .. dann wird dir geholfen

Grüße Uwe
Gelöste Beitrage bitte auch als solche markieren.Danke.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Outlook & Mail
gelöst Outlook 2010 Dateianhänge von bestimmten Exchange Mails in Ordner verschieben (5)

Frage von Kineas zum Thema Outlook & Mail ...

Windows Tools
gelöst Tool um neue Dateien aus Ordner A EINMAL in Ordner B zu kopieren (6)

Frage von Archimedes zum Thema Windows Tools ...

Batch & Shell
gelöst Dateien anhand des Namens in neue Ordner verschieben (17)

Frage von Cookiemonster zum Thema Batch & Shell ...

Exchange Server
gelöst Exchange-Transport-Regel für Kopie gesendeter Mails in Öffentliche Ordner (1)

Frage von ex-166 zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...