Top-Themen

Aktuelle Themen (A bis Z)

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, 1872 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 ..
Ähnliche Inhalte
Exchange Server
Weiterleiten von E-Mails an öffentlichen Ordner
Frage von FLX1990Exchange Server8 Kommentare

Hallo, ich habe folgendes Problem Habe einen öffentlichen Ordner \Gruppen und in diesem einen SubPF test@domain.com. Verwendet wird Exchange ...

Exchange Server
Nach Migration auf Exchange 2016 Zugriff auf neuere E-Mails in Öffentlichen Ordnern sehr langsam
gelöst Frage von bGnExchange Server12 Kommentare

Hallo, nach Migration von 2010 auf 2016 haben wir ein seltsames Phänomen mit den Öffentlichen Ordnern! Es befindet sich ...

Exchange Server
Öffentliche Ordner auf neuen Exchange umziehen
Frage von addamainExchange Server2 Kommentare

Hallo zusammen, ich bin gerade dabei einen Exchange Server 2010 SP2 auf einen neuen Exchange 2010 Server zu migrieren ...

Exchange Server
Transportregel für neue Beiträge in öffentlichem Ordner
gelöst Frage von ahstaxExchange Server2 Kommentare

Hallo, ich suche nach einer Möglichkeit, auf einem Exchange-Server eine Transportregel so einzurichten, dass sie auch bei neuen Beiträgen ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 16 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 19 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware10 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...