[Hausautomation] – mit FHEM PC starten / herunterfahren

Posted in Hausautomation, Plex / Kodi on April 23, 2017 by Predictor

 

Nachdem ich gerade meinen Plex Client in FHEM einbinde, musste ich mich auch mit dem Thema einen RaspBerry per FHEM herunterfahren zu können beschäftigen.
Ich wollte mich an den Blogpost von linuxfun halten, nur leider scheitert dies schon am Anfang, den im LibreELEC ist kein useradd integriert und auch das nachinstallieren von Paketen ist nicht vorgesehen.
Auch der Blogpost von flurweg geht diesen Weg.

 

Der Blogpost von heinz-otto sieht auch sehr vielversprechend aus – ist aber für Windows (aber auch WOL ist darin beschrieben).

 

Im FHEM Forum gibt es dazu auch ein paar Posts:
SleepOnLan – dort wird am Ende auf diesen gelösten Thread verwiesen SSH-Probleme

Auch in einem anderen Thread wird der Weg über Keys gegangen, in diesem Thread wird auf diesen verwiesen: OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu

Also werde ich mich wohl mit der Key Geschichte noch beschäftigen müssen.

UPDATE:
Ich werde es zuerst mit dem Linux Tool sshPass versuchen.

Aber da der RasPlex ja per FHEM später sich selber den Strom abknipsen soll, muss ich mich auch noch mit der Geschichte beschäftigen dass beim Shutdown von Linux ein Script ausgeführt wird. Dieses Script soll dann im FHEM einen Timer auslösen der nach ein paar Sekunden die Steckdose abschaltet.

 

Im Blogpost von meintechblog geht es noch einen Schritt „weiter“ hier wird Plex in FHEM integriert, aber im Moment will ich ja nur ein- bzw ausschalten.
Natürlich ist auch im FHEM-Forum dazu etwas zu finden.

Hier ist noch ein Miniscript zu finden dass den Status EINES Clients ausgibt ob er gerade etwas abspielt oder eben nicht.

 

Plex Media Server (PMS)

Posted in Plex / Kodi with tags , , , on April 23, 2017 by Predictor

Wer über einen VPN Tunnel auf seinen PMS zugreifen will, braucht natürlich erst einmal einen Tunnel.

Als nächstes wird man aber fest stellen dass der Plex andere Netze (und so wird es wohl bei 99% der Tunnels sein) einfach so nicht zulässt.
Also müssen die Netze die Zugriff haben sollen freigegeben werden, dies geht in der Plex Oberfläche Einstellungen -> Netzwerk -> Liste der IP-Adressen und Netzwerke, die keine Authentifizierung benötigen

ACHTUNG:Die Netze müssen mit dem kompletten Subnet angegeben werden: ip/netmask,ip/netmask
Beispiel: 192.168.1.0/255.255.255.0,10.10.10.0/255.255.255.0

Diese und andere Einstellungen (die Teilweise nicht über die Weboberfläche zu finden sind) können auch direkt in der Config vorgenommen werden.
Je nach OS (nachzulesen HIER):

Unter Windows in der Registry:
Computer\HKEY_CURRENT_USER\Software\Plex, Inc.\Plex Media Server

Unter OS X
Using the Finder’s „Go“ menu, select Go To Folder… then enter the following in the dialog box that pops up:
~/Library/Preferences/

Unter Linux
in the Preferences.xml file in the main Plex Media Server data directory contains the corresponding settings.

Eine Liste der Settings ist auf der Plex-Supportseite zu finden

 

Plex Media Server als Dienst einrichten (Windows)

Ein Interessanter Punkt ist, Plex läuft Standardmäsig NICHT als Dienst, sprich ist kein User am Server angemeldet läuft auch Plex nicht.
Hier ist etwas Bastelarbeit gefordert – getestet habe ich das bisher noch nicht -> drei Möglichkeiten kommen imho in Betracht:

Mit Windows Boardmitteln
sc.exe
Info´s hierzu bei Microsoft, Administrator.de oder bei Dr Windows

Mit Freeware Tool
NSSM
Informationen u.a. bei ugg.li

Mit dem Plex service wrapper
Ich denke dies wird mein erster Test sein (aber zuerst bastle ich noch am Client etwas herum)
download bei github
Informationen gibt es im Plex Forum, YouTube, bei reddit-2 oder reddit-1

Automatisch in Stanby fahren und per WOL wieder aufwachen

Beim einem Blick auf den Stromzähler wird es klar – den Server 24/7 durchrennen zu lassen ist ein teurer Spass, also die Kiste soll automatisch in Standby und auch automatisch wieder aufwachen. Auch hier gibt es verschiedene Ansätze:

Per Script Plex abfragen
Wenn der Server nur als PMS verwendet wird, kann man mit einem Script Plex abfragen ob gerade etwas abgespielt wird und wenn nicht eine bestimmte Aktion (z.B. Standby) triggern.

Anhand Windows auslastung (mit Tool)
In meinem Fall wird der Server auch als Fileserver verwendet. Es werden also auch mal Daten per Share verwendet – da bekommt Plex nichts davon mit und die Script Variante würde den Server herunterfahren.
Ich habe das Freeware Tool WinOFF von ampsoft verwendet.
Das schöne hierbei ist, das der Parameter „Netzwerkauslastung“ zur Verfügung steht.
Wenn also die Netzwerkauslastung 30min lang unter 30kb ist UND der Benutzer 45min keine Eingaben macht, fährt der Server in Standby (Hibernate funktioniert mit WOL nicht).

[Hausautomation] – fhem auf Fritz!box installieren

Posted in Computer & Netzwerke, Fritz!Box, Hausautomation, RaspberryPI with tags , , on November 19, 2015 by Predictor

Ich bin heute zufällig über einen interessanten Post gestolpert.
In diesem wird beschrieben wie FHEM ein Telefon anrufen kann um z.B. eine Türklingel zu melden.

 

http://www.jens-bretschneider.de/fhem-ruft-fritzbox/

[Hausautomation] – fhem auf Fritz!box installieren

Posted in Computer & Netzwerke with tags , on Februar 17, 2014 by Predictor

Eigentlich habe ich seit Feb 2012 FHEM produktiv im Einsatz, zu dieser Zeit entstand auch der Post „[Hausautomation] – Step1 – fhem auf Fritz!box installieren (Teil6)“ – warum also dieser Titel?
Wie im letzten Post [FritzBox7390] OpenVPN geschrieben, hatten sich nach dem update auf FritzOS 6.0.3 ein paar Dienste verabschiedet. So auch FHEM.
Da ich keine Lust auf Fehlersuche habe – einfach …

Backup machen und FHEM reinstallation

  1. der einfachkeit halber den ganzen FHEM Ordner per ftp weg kopiert
  2. von der FHEM Homepage das aktuelle Image heruntergeladen
  3. per Firmware update das Image installiert
  4. die fhem.cfg aus dem Backup wieder hergestellt
  5. die Logfiles aus dem Backup zurückgespielt
  6. pauschal updates in fhem gefahren

Fertig die Laube

Problem solved
:-)

[FritzBox7390] OpenVPN

Posted in Fritz!Box with tags , , , , on Februar 15, 2014 by Predictor

Seit Oktober 2010 war mein openVPN auf meiner 7390 aktiv und das ohne Probleme.
Auch diverse Firmware updates der FritzBox hat die openVPN konfig nicht ins schleudern gebracht.

Das update auf FritzOS 6.00 habe ich nicht gemacht, ich bin auf 5.50 geblieben.
Da ich den security patch in FritzOS 06.03 aber haben wollte, habe ich (weil in der Vergangenheit ja immer alles easy war) einfach mal upgedatet …
… das war jetzt evtl. nur meine zweitbeste Idee  😦 danach war es nichts mehr mit openVPN.

FEHLERSUCHE:

Als erstes mal die Datei startfhem im fhem Ordner zerlegen und step by step in der Konsole ausführen:

  • /usr/sbin/telnetd -l /sbin/ar7login
  • mkdir /var/tmp/vpn
  • mknod /var/tmp/tun c 10 200
  • /var/InternerSpeicher/OpenVPN/openvpn –cd /var/tmp/vpn –daemon –config /var/InternerSpeicher/OpenVPN/server.conf –script-security 2

OK zu beginn alles wie erwartet … File existsFile exists
doch dann can’t handle reloc type 0x2f
So sollte das nicht sein -> kurze Recherche, und im ip-phone-forum schrieb er13:

Ursache – AVM ist auf NTPL-based threading support umgestiegen. Damit sind die meisten dynamisch gelinkten Binaries inkompatibel zu 06.00

In diesem Post war auch gleich der Link zu den aktuellen Binaries (Ver 2.3.2) oder einfach mal in einer Suchmaschine nach openvpn_2.3.2-mips-openssl-static.gz suchen.
Ein Blick auf die openVPN Homepage ist auch hilfreich um die aktuelle Version herrauszufinden (ob die dann auch bereits für eine FritzBox portiert wurde ist etwas anderes).

OpenVPN: OpenSSL vs PolarSSL

Wer sich jetzt wundert warum dort 2 Links zu finden sind:

Dem geht es wie mir. Im Heise Forum ist zu lesen:

ich habe in einem beitrag im neuen linux-magazin (4/13, s.10) gelesen, dass OpenSSL 2.3 nicht mehr auf OpenSSL, sondern auf PolarSSL aufsetzt.
Was ist der Vorteil von PolarSSl gegenüber OpenSSL?

nach http://en.wikipedia.org/wiki/Comparison_of_TLS_implementations ist es wohl kleiner, kann aber weniger.

wie ist es mit der interoperabilität? Können ältere OpenVPN-clienst mit neuen servern, und anders rum, verbindungen aufbauen?

Fragen über Fragen.

Ich bleibe einfach mal bei openssl

Kurz noch geprüft ob die ar7.cfg noch meinen modifizierten Eintrag hat:

grep 443 /var/flash/ar7.cfg

bestätigte -> der openVPN Port ist noch eingetragen

„tcp 0.0.0.0:XXX 0.0.0.0:XXX 0“,

XXX -> openVPN Port (Standard 1194)
Der vollständigkeit halber mit vi die startup.sh im OpenVPN Ordner überprüft -> passt auch noch:

# Start des telnet-daemons
echo Starting telnetd
/usr/sbin/telnetd -l /sbin/ar7login

# warten, bis das DSL da ist
echo Waiting for internet connection
while !(ping -c 1 http://www.google.de); do
sleep 5
done

mkdir /var/tmp/vpn

# create tun-device
mknod /var/tmp/tun c 10 200

# start OpenVPN (Dateinamen ggf. anpassen)
/var/InternerSpeicher/OpenVPN/openvpn –cd /var/tmp/vpn –daemon –config /var/InternerSpeicher/OpenVPN/server.conf –script-security 2

Jetzt noch die debug.cfg prüfen dann sollte so ziemlich alles gecheckt sein.

Wie oben geschrieben verwende ich die openssl und da ich eine 7390 habe logischerweise als Mips.
Flugs per ftp (übertragungsmethode „binary“) die das binary hochgeladen und mit chmod ausführen erlaubt.

Leider immer noch keine Verbindung – also noch einmal das startup.sh Befehl für Befehl ausgeführt.
Beim eigentlichen start von openVPN erhielt ich folgende Fehlermeldung:

Options error: Unrecognized option or missing parameter(s) in /var/InternerSpeicher/OpenVPN/server.conf:6: port-share (2.3.2)
Use –help for more information.

Es scheint dass die option port-share (die es in openVPN 2.0.5 noch gab) in der 2.3.2 entfernt wurde.

openVPN config Parameter

nachdem port-share zu einem Fehler führte dachte ich es wäre nicht schlecht mal die server.conf zu checken.
Sehr Hilfreich ist das openVPN WIKI und evtl noch die openVPN man Page.

Jetzt noch mal testen und erfreulicherweise meldet jetzt die Konsole:

Sun Feb 16 22:18:21 2014 Listening for incoming TCP connection on [undef]
Sun Feb 16 22:18:21 2014 TCPv4_SERVER link local (bound): [undef]
Sun Feb 16 22:18:21 2014 TCPv4_SERVER link remote: [undef]
Sun Feb 16 22:18:21 2014 Initialization Sequence Completed

Auch der test vom Client aus bestätigte -> alles wieder in Butter!!!

Problem solved
🙂

Eine interessante Seite finde ich xobztirf.de, dort sind ein paar nette Tipps zur FritzBox zu finden.
Unter anderem ist auf der Seite auch ein Pintest-Script zur überwachung anderen Servern zu finden.

[Raspberry-mailserver] – 6. Fetchmail (mail collector)

Posted in RaspberryPI with tags , , , , , on Januar 12, 2014 by Predictor

Die Linux Philosophie ist ja „ein Programm pro Aufgabe“.
Soll bedeuten:
Unter Windows gibt es Exchange der macht alles (versenden, abholen, …).
Bei Linux gibt es z.B Exim nur zum mails versenden (oder sendmail oder oder -> einfach mal nach MTA – Mail Transfer Agent googeln).

Ich verwende für meinen Mailserver:

  1. Eximzuständig für den Mailversand
  2. Dovecotlokaler IMAP Server
  3. Fetchmailabholung der mails beim provider
  4. RoundcubeGUI für Dovecot

Fetchmail (mail collector)
Fetchmail wird zum abholen der mails vom Provider eingesetzt.

Die Installation erfolgt ganz einfach per aptitude

sudo aptitude install fetchmail procmail

Nach abgeschlossener Installation muss im Homedrive „/home/<USERNAME>“ jedes Mailusers (diese wurden ja nach der Dovecot Installation angelegt) folgende Datei angelegt werden:
Am besten mit dem entsprechenden User anmelden.

pico /home/<USERNAME>/.fetchmailrc

mit folgendem Inhalt (ACHTUNG zum testen die Option keep setzen – so werden die mails beim Provider nicht gelöscht):

poll imap.gmail.com
protocol IMAP
user ‘maxmuster@googlemail.com’
is mmuster
pass ‘123456’
folder INBOX
ssl
mda ‘formail -c -a Date: >> ~/mail/.INBOX.Gmail’
keep

ODER

#.fetchmailrc
#Server GMX with IMAP
poll imap.gmx.de protocol IMAP:
username „maxmuster@gmx.de“ password „123456“ is „mmuster“ here;
folder INBOX
ssl

#Optionen
# formail als mda – formail optionen
#http://www.man-online.org/page/1-formail/
mda „formail -c -a Date: >> ~/mail/.INBOX.GMX“
keep

… to be continued!!!

Tipps & Tricks

ich musste das Verzeichnis /mail/ manuell anlegen, danach werden die mails auch in die Datei geschrieben.
Eine Installationsanleitung und Tipps sind zu finden bei tuxhausen.de

Datum und Uhrzeit werden geändert (wann die mail vom Provider abgeholt wurde)

Datum und Uhrzeit „Erhalten“ entspricht nicht mehr der Uhrzeit zu der die mail beim eigentlichen Provider ankam.
Laut einem Post in linux.debian.user.german setzt derMTA (in meiner konfig. Exim) die Zeit und verursacht das Problem.

Aus der Fetchmail-FAQ:
O10: Why is the received date on all my messages the same?
A: This is a design choice in your MTA, not fetchmail. It’s taking the
received date from the last Received header.

Die Lösung ist relativ simpel wenn man weis nach was suchen.
Es handelt sich ganz einfach um einen BUG von fetchmail, der auch in der man Page von formail beschrieben ist.

BUGS
       When formail has to generate a leading `From ' line  it  normally  will
       contain  the  current date.  If formail is given the option `-a Date:',
       it will use the date from the `Date:' field in the header (if present).
       However,  since formail copies it verbatim, the format will differ from
       that expected by most mail readers.

LÖSUNG
mda „formail -c -a Date: >> ~/mail/.INBOX.GMX“

anstelle von
mda „formail -c >> ~/mail/.INBOX.GMX“

Aktueller Stand

10.01.2014
Die mails scheinen sauber beim Provider abgeholt zu werden, allerdings hänge ich noch an einem Problem mit Dovecot, deswegen noch nicht produktiv geschalten.

21.01.2014
Nachdem das Dovecot Problem nun gelöst ist, stelle ich fest dass die mails mit dem Zeitstempel versehen werden wenn fetchmail die mails beim Provider abgeholt hat.

 23.01.2014
Ich bin immer noch dem timestamp Problem auf der Spur, ich denke mal dass die Zeile „mda ‚formail -c >>“ eine Spur sein könnte. Denn fetchmail soll wohl nicht schuld sein.
MDA bedeutet Mail Delivery Agent – dass schreit ja fast schon danach.

 25.01.2014
Das timestamp Problem ist jetzt gelöst (und der Blogpost geändert. Es fehlte einfach der Parameter „-a“ in mda „formail -c -a Date: >>…

Outlook und IMAP

Posted in RaspberryPI with tags , , , , , on Januar 11, 2014 by Predictor

Da ich gerade am Mailserver aufsetzen (unter Debian) bin, stolperte ich mal wieder darüber das Outlook 2003 bei IMAP gelöschte mails nur durchgestrichen darstellt und nicht löscht.

Das Problem besteht scheinbar auch noch bei Outlook 2007, mit Outlook 2010 und höher ist dies wohl gelöst.

Es gibt aber auch für 2003 und 2007 Lösungsansätze:

Outlook 2010 & 2013

Bei diesen 2 Outlook Varianten ist die automatische Löschung bereits „ab Werk“ aktiviert, sollte also kein Problem darstellen

Outlook 2007

Unter Outlook 2007 hat Microsoft, gegenüber 2003, nachgebessert und automatisches löschen kann man nun Einstellen.
Für eine Anleitung bei office.microsoft.com nachschauen.

Outlook 2003

Durchgestrichene IMAP-Elemente endgültig löschen

Wenn Sie ein Element auf einem IMAP-Server zum Löschen markieren (durchgestrichen Dargestellt), wird es in der Kopfzeilenliste durchgestrichen angezeigt.
Um dieses markierte Elemente endgültig zu löschen, gehen Sie wie folgt vor:

  • Klicken Sie im Menü Bearbeiten auf Gelöschte Nachrichten permanent löschen

Quelle: office.microsoft.com

Um mails automatisch permanennt zu löschen braucht man ein Makro – das unten stehende wurde von der Staudte EDV Beratung geschrieben und als Freeware veröffentlicht.
Das Script und die Anleitung wurde 1 zu 1 von der Staudte EDV Beratung übernommen.

Outlook 2003 IMAP Aufräummakro, Version 1.2

Dieses Makro für Microsoft Outlook 2003 entfernt beim Verlassen und Betreten von IMAP Ordnern automatisch und endgültig die gelöschten Nachrichten. Diese Funktion ist in Outlook Express noch standardmäßig enthalten, in Outlook 2003 werden gelöschte Nachrichten nur durchgestrichen und müssen dann manuell mit „Gelöschte Nachrichten permanent löschen“ entfernt werden, was sehr mühsam ist.

Lizenzinformationen

Das Makro ist Freeware und darf als solche beliebig weitergegeben und in eigene Anwendungen integriert werden. Wir bitten nur darum, dass ein Hinweis auf die Quelle des Makros angegeben wird. Weiterhin freue ich mich, wenn Sie uns eine Nachricht im Kontaktbereich hinterlassen, wie zufrieden Sie mit dem Makro sind und wie Sie hierher gefunden haben.

DIESES MAKRO LÖSCHT DATEN – nämlich alle Nachrichten, die Sie vorher in Outlook zum Löschen markiert haben. Sie setzen das Makro auf eigene Gefahr ein – es ist zwar klein und harmlos, aber wir übernehmen keine Gewähr auf die Funktion und sind für Schäden nicht haftbar. Fragen Sie im Zweifelsfall Ihren Systembetreuer.

Technische Informationen

  • Markieren Sie den nachfolgenden Programmtext und kopieren Sie in mit Strg-C.

  • Öffnen Sie Outlook 2003 und dann im Menü Extras die Option Makro->Visual Basic-Editor.

  • Doppelklicken Sie im linken Fensterbereich „DieseOutlookSitzung“

  • Klicken Sie dann einmal ins rechte, leere Fenster und fügen Sie den Programmcode mit Strg-V ein.

  • Speichern Sie das Makro mit Strg-S.

  • Schließen Sie dann das Visual Basic Fenster.

  • Eventuell müssen Sie In Extras->Makro->Sicherheit noch die Sicherheitsstufe auf Mittel oder Niedrig stellen, damit Outlook die Ausführung des Makros erlaubt. Sie können alternativ auch ein eigenes Zertifikat erstellen und das Makroprojekt damit signieren. Dazu müssen Sie gegebenenfalls die „Digitale Signatur für VBA-Projekte“ im Office-Setup nachinstallieren. Starten Sie anschließend das Tool SelfCert.exe im Ordner „C:\Programme\Microsoft Office\Officexx“ (xx ist Ihre Programmversion, z.B. 11 für Office 2003) und folgenden Sie den Anweisungen. Danach wechseln Sie wieder in den Visual Basic-Editor und wählen im Menü Extras die Option Digitale Signatur. Über die Schaltfläche Wählen weisen Sie dem Projekt dann das selbst erstellte Zertifikat zu. Nach dem Speichern starten Sie Outlook neu. Beim ersten Ausführen werden Sie gefragt, ob Sie diesem Makro vertrauen. Markieren Sie das Kontrollkästchen Makros aus dieser Quelle immer vertrauen und wählen Sie Makros aktivieren. Beim nächsten Programmstart wird das Makro nun auch ohne Rückfragen ausgeführt werden, wenn Sie die Makrosicherheit auf Niedrig oder Hoch eingestellt haben.

  • Starten Sie Outlook neu und das Makro ist aktiv.

Danach muss noch jeder IMAP Ordner, den das Makro automatisch bereinigen soll, markiert werden. Dazu fügen Sie den Text IMAPCleanup irgendwo in die Beschreibung jedes Ordners ein, der vom Makro bedient werden soll:

  • Klicken Sie mit der rechten Maustaste auf den IMAP Ordner.

  • Wählen Sie Eigenschaften

  • Geben Sie im Beschreibungsfeld IMAPCleanup ein. Groß- und Kleinschreibung spielt keine Rolle, es kann auch anderer Text drumherum stehen.

  • Wiederholen Sie diesen Vorgang für alle anderen IMAP Ordner, ganz nach Wunsch.

Damit das Makro nicht jedes Mal eine Bestätigung einholt, bevor es die Nachrichten löscht, sollten Sie in Outlook unter Extras->Optionen->Weitere->Erweiterte Optionen->“Warnung anzeigen, bevor Elemente endgültig gelöscht werden“ das Häkchen entfernen.

Das Makro wurde für Outlook 2003 unter Windows geschrieben. Es wurde von anderen Anwendern aber auch schon erfolgreich in Outlook 2000 und Outlook 2002 (XP) eingesetzt.

Der Makro-Code

' IMAP Aufräummakro v1.2, Staudte EDV Beratung, 5. Januar 2005, www.Staudte-EDV.de
' Dieses Makro ruft beim Betreten und Verlassen eines IMAP Ordners in Outlook 2003 (OL2K3)
' automatisch die Funktion "Gelöschte Nachrichten permanent löschen" auf und zwar für alle
' IMAP Ordner, bei denen in der Beschreibung vorher der Text IMAPcleanup eingefügt wurde.
' (Groß- und Kleinschreibung spielt keine Rolle).
' Damit das Makro nicht jedes Mal eine Bestätigung einholt, bevor es die Nachrichten löscht,
' sollten Sie in Outlook unter Extras->Optionen->Weitere->Erweiterte Optionen->"Warnung anzeigen,
' bevor Elemente endgültig gelöscht werden" das Häkchen entfernen.
' Neu in Version v1.1 ist, dass beim Starten von Outlook einmal alle Ordner durchgegangen werden.
' Das war notwendig geworden, weil manche Benutzer nur dem IMAP Posteingang benutzen und
' entsprechend nie den Ordner wechseln. Sollte diese Funktion bei Ihnen Schwierigkeiten machen,
' dann löschen Sie einfach die Funktion Application_MAPILogonComplete aus dem Makro.
' In v1.2 kamen nur kleinere Fehlerkorrekturen und Optimierungen hinzu.
' Das Makro ist Freeware und darf als solche beliebig weitergegeben und in eigene Anwendungen
' integriert werden. Wir bitten nur darum, dass ein Hinweis auf die Quelle des Makros
' angegeben wird. Weiterhin freue ich mich, wenn Sie uns eine E-Mail unter info@staudte-edv.de
' senden würden, wie zufrieden Sie mit dem Makro sind und wie Sie es gefunden haben.

' IMAP Cleanup Macro v1.2, Staudte EDV Beratung, 5-January-2005, www.Staudte-EDV.de
' This macro automatically purges deleted messages from IMAP folders in Outlook 2003 (OL2K3)
' whenever the user enters or leave an IMAP folder that has been marked for cleanup. To mark
' an IMAP folder, place the text IMAPcleanup somewhere in the description field of the folder
' (not case sensitive).
' The macro may prompt you each time it tries to purge deleted messages. To stop these prompts,
' uncheck the following option in Outlook: Tools->Options->Additional->Additional options->
' show warning before deleting messages. (I'm translating this from german Outlook, as I don't
' have an english version here. If someone can tell me the exact names of the menus and options,
' I would appreciate a note so that I can update this text. Thank you.)
' New in version v1.1 is the function that walks through all folders once when Outlook ist
' started. This became necessary as some users only used the inbox folder and never switched
' folders. If this function should cause any trouble, simply remove the Application_MAPILogonComplete
' function from the macro.
' v1.2 just adds some minor error corrections an optimizations.
' This macro is freeware and may as such be distributed freely. You may also integrate it into
' your own applications, as long as a reference to the source is maintained. We would also be
' happy to hear from you, by email to info@staudte-edv.de, if you are satisfied with the tool
' and how you found it.

Option Explicit

Dim myOlApp As New Outlook.Application

Public WithEvents myOlExp As Outlook.Explorer

Public Sub Application_Startup()
  Set myOlExp = myOlApp.ActiveExplorer
End Sub

Public Sub Application_MAPILogonComplete()
  Dim appOutlook As Application, nsMapi As NameSpace, RootFolder As MAPIFolder, OriginalStartFolder

  Set appOutlook = CreateObject("Outlook.Application")
  Set nsMapi = appOutlook.GetNamespace("MAPI")

  OriginalStartFolder = ActiveExplorer.currentFolder.EntryID
  For Each RootFolder In nsMapi.Folders()
      PurgeFolderRecursively nsMapi.Folders(RootFolder.Name)
  Next
  Set ActiveExplorer.currentFolder = nsMapi.GetFolderFromID(OriginalStartFolder)
End Sub

Private Sub myOlExp_BeforeFolderSwitch(ByVal NewFolder As Object, Cancel As Boolean)
  PurgeCurrentFolder
End Sub

Private Sub myOlExp_FolderSwitch()
  PurgeCurrentFolder
End Sub

Private Sub PurgeCurrentFolder()
  Dim f As MAPIFolder
  Dim appOutlook As Application, nsMapi As NameSpace, barEdit As CommandBar
  Dim btnPurge As CommandBarButton

  Set f = myOlExp.currentFolder
  On Error GoTo skip
  If InStr(LCase(f.Description), "imapcleanup") > 0 Then
    Set appOutlook = CreateObject("Outlook.Application")
    Set nsMapi = appOutlook.GetNamespace("MAPI")
    Set barEdit = ActiveExplorer.CommandBars("Edit")
    Set btnPurge = barEdit.FindControl(msoControlButton, 5583, , , True)
    btnPurge.Execute
  End If
skip:
End Sub

Private Sub PurgeFolderRecursively(RootFolder As MAPIFolder)
  Dim currentFolder As MAPIFolder

  If InStr(LCase(RootFolder.Description), "imapcleanup") > 0 Then
    Set ActiveExplorer.currentFolder = RootFolder
    PurgeCurrentFolder
  End If

  For Each currentFolder In RootFolder.Folders
    PurgeFolderRecursively currentFolder
    DoEvents
  Next
End Sub

Quellen:
msxfaq.de
Staudte EDV Beratung