Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Outlook2016, Immer gleichen störenden Textblock automatisch löschen

Begonnen von neutrino, März 18, 2020, 18:13:26

⏪ vorheriges - nächstes ⏩

neutrino

Hallo Experten,
unser Firmenserver ist leider so eingestellt, dass jede externe Mail mit folgendem oben über der Anrede einkopierten Textblock angezeigt wird:

ACHTUNG: Diese Mail kommt von ausserhalb des Unternehmens. Bitte öffnen Sie keine Links oder Anlagen, wenn Sie den Absender nicht kennen... usw.

Für jemanden der täglich mit Mails umgeht, ist das eher nervig, zumal auch die Mailvorschau dadurch komplett sinnlos belegt wird.

Könnte man kein Makro hinterlegen, welches diesen Block mit einem Click löscht ? Oder noch besser alle Mails im Posteingang durchgeht und diesen Textblock löscht ? Der Textblock ist wie gesagt immer genau gleich, steht immer ganz oben und ist somit identifizierbar.

Danke und Gruss

neutrino

DF6GL

Hallo,

irgendwer wird ja wohl den Firmenserver (oder vielleicht den Mailserver) so "eingestellt" haben.

Es ist dringend angeraten, den dafür zuständigen Admin zu befragen, sonst könnte der Schuss  nach hinten losgehen...

neutrino

 :) :) Danke für die Ermahnung, ist sicherlich richtig.. Eigentlich bin ich aber mehr an der technischen Lösung interessiert. Kann man einen immer gleichen Textblock per Makro erkennen und löschen ?

PhilS

Zitat von: neutrino am März 19, 2020, 08:56:25Kann man einen immer gleichen Textblock per Makro erkennen und löschen ?
Eingehende Emails sind meines Wissens in Outlook schreibgeschützt.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

Hallo,
Vorweg, mit Outlook Macros und VBA kenne ich mich NULL aus.
Deshalb mehr eine Frage als eine Antwort.
Gibt es in OL Ereignisse? Ich denke schon.
Könnte man dann bei einem geeigneten nicht einfach den Cursor hinter den
"Stör"text setzen, oder den Scrollbalken manipulieren?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, läßt etwas anderen geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

neutrino

@Phils: man kann in Outlook Mails auch im Posteingang nachbearbeiten, dazu gibt es den Menüpunkt "Nachricht bearbeiten"

@Beaker: hab nicht verstanden, wie das mit dem Scrollbalken gemeint ist ? Man kann den Textbereich ja manuell markieren und löschen (wenn zuvor "Nachricht bearbeiten" aktiviert wurde). Da fand ich es naheliegend, dass dies auch per Makro möglich sein müsste. Aber in Outlook bin ich auch nicht so fit.

Beaker s.a.

@Neutrino
Ausgehend von Philips Aussage bezügl. Editierbarkeit, die du ja inzwischen
widerlegt hast, meinte ich den sichtbaren Bereich der Vorschau auf den
Anfang der tatsächlichen Nachricht zu verschieben.
Wenn das Bearbeiten per Menupunkt möglich ist, sollte das auch mit VBA
funktionieren. Da musst du dich mal durch das Objektmodell von OL kämpfen.
Unterstützen kann ich dich dabei leider nicht, da ich es nicht habe.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, läßt etwas anderen geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

Zitat von: neutrino am März 19, 2020, 15:12:33
@Phils: man kann in Outlook Mails auch im Posteingang nachbearbeiten, dazu gibt es den Menüpunkt "Nachricht bearbeiten"
Interessant. Das ist ein relativ neues Feature und ich kannte das noch nicht.

In ThisOutlookSession:
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim mi As MailItem
   
    Set mi = Application.GetNamespace("MAPI").GetItemFromID(EntryIDCollection)
    mi.Body = Replace(mi.Body, "ACHTUNG: Diese Mail kommt von ausserhalb ...", "")
    mi.Save
   
End Sub


Das ist nur mal kurz runtergeschrieben und nicht groß getestet.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

neutrino

Der Code sah erstmal plausibel aus, Danke. Habe versucht, diesen als Makro einzusetzen, aber das Makro ist anschließend nicht auffindbar. Ich finde in Outlook auch keine programmierbare Schaltfläche (wie in Excel, Word oder Access), der man den Code anhängen könnte.

Und eine weiteres Problemchen. Der Text "Achtung..." ist in Wahrheit eine eingesetzte Tabelle (zumindest wird bei Rechtsclick im Kontextmenü der Menüpunkt "Eigenschaften Tabelle" angezeigt). Man kann diese anklicken und dann beliebig verschieben. Wie kann man ein solches Objekt adressieren ?

Ist wohl doch zu schwierig.. :(

PhilS

Zitat von: neutrino am März 20, 2020, 17:42:44
Der Code sah erstmal plausibel aus, Danke.
"nicht groß getestet" = Der Code funktioniert in einem einfachen, konstruierten Testfall.

Zitat von: neutrino am März 20, 2020, 17:42:44Habe versucht, diesen als Makro einzusetzen, aber das Makro ist anschließend nicht auffindbar.
Das solltest du genauer erklären. Normalerweise verschwindet VBA-Code nicht einfach.

Zitat von: neutrino am März 20, 2020, 17:42:44Ich finde in Outlook auch keine programmierbare Schaltfläche (wie in Excel, Word oder Access), der man den Code anhängen könnte.
Wenn du den Code manuell auf Klick einer Schaltfläche ausführen willst, musst du wahrscheinlich einen Ribbon-Button erstellen. - Aus dem Stegreif kann ich dazu keine Tipps geben, aber googeln hilft: Create a button for a macro
Dafür solltest du im Zweifelsfall einen eigenen Thread aufmachen.

Zitat von: neutrino am März 20, 2020, 17:42:44Und eine weiteres Problemchen. Der Text "Achtung..." ist in Wahrheit eine eingesetzte Tabelle...
Dann solltest du anstelle der Body-Eigenschaft des Mailitems HTMLBody verwenden und den HTML-Quelltext deiner Tabelle suchen und ersetzen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

neutrino

Habe versucht, Deinen Code über "Makro erstellen" in Outlook einzustellen. Es geht dann ein VBA-Fenster auf mit der Vorgabe:

Sub neu()

End Sub

Wie kann ich jetzt Deinen Code hier einfügen. Habe es schon mehrfach versucht aber ohne Erfolg. Es wird mir das neue Makro anschließend nicht angezeigt, weshalb ich es auch nicht starten kann. Es ist in der VBA-Umgebung unter "Modul1" gespeichert, aber nicht aufrufbar. Wo liegt der Unterschied zwischen Sub und Private Sub ? Ist das schon die Ursache ?
Mir fehlen hier einfach Grundkenntnisse.. :-\

PhilS

Zitat von: neutrino am März 21, 2020, 15:13:00
Habe versucht, Deinen Code über "Makro erstellen" in Outlook einzustellen. Es geht dann ein VBA-Fenster auf mit der Vorgabe:

Sub neu()

End Sub

Wie kann ich jetzt Deinen Code hier einfügen.
Menu: Ansicht -> Projekt Explorer.Dann unter "Microsoft Outlook Objects", Doppelklick auf "ThisOutlookSession" und dann in das VBA-Fenster den kompletten Code von mir einfügen.

Damit wird das NewMailEx-Ereignis des Application-Objektes behandelt (Ereignisprozedur). D.h. dieser Code wird immer ausgeführt, wenn eine neue Email ankommt. Der Code ist dann aber kein Makro im engeren Sinne und kann nicht manuell aufgerufen werden.

Du kannst nach dem gleichen Schema auch ein konventionelles Makro (Public Sub in einem normalen Modul) erstellen.In einem normalen Modul wird "Public" für alle Prozeduren automatisch angenommen, wenn nicht explizit "Private" angegeben wurde. Nur öffentliche (Public) Methoden können von ausserhalb des Moduls aufgerufen werden.

Allerdings musst du in einem normalen Makro selbst per Code ermitteln, auf welche Emails die Änderungen angewendet werden sollen. Dazu hilfreich ist die Items-Auflistung des Inbox-Ordners:Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items




Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

neutrino

SUUPER, habe es getestet, klappt perfekt ! Hatte erst gerätselt, weil Du Menü "Ansicht" geschrieben hast, es ist aber Menü "Entwicklertools"
Es wurde sogar der Text in der vermeintlich eingefügten Tabellenform gefunden und gelöscht. Allerdings hatte ich zum Test einen Einzeiler in dieser Tabelle (das Objekt hatte ich mir 1:1 aus einer Firmenmail kopiert) ausprobiert.
Problem ist, in der Originalmeldung (Tabelle) ist ein zweizeiliger Text mit einem Zeilenumbruch enthalten. Wenn ich die 2 Zeilen kopiere und in Deinen Code einfüge, ergibt sich zunächst ein Fehler (Code wird rot), weil der Zeilenumbruch den Code unterbricht. Wenn ich die Zeile2 an Zeile1 hinten anfüge, wird der Code angenommen, der Textblock wird aber durch diese Änderung nicht mehr erkannt.
Ist das auch lösbar ?
Schonmal Danke, fand ich bis hier schon sehr interessant !
Gruß
neutrino



neutrino

Habe es heute nochmal getestet. Der Zeilenumbruch zwischen den beiden zu löschenden Textzeilen ist aus zuvor genanntem Grund nach wie vor das Hindernis. Ich kann entweder die 1. oder die 2. Zeile gezielt löschen, beide aber nicht. Habe auch versucht, 2 Makros (für jede Zeile eines) nacheinander in ThisOutlookSession einzukopieren. Ergebnis ist, dass dann gar nichts gelöscht wird.

Ansonsten ist dies eine Top-Lösung für das beschriebene Topic.

PhilS

Zitat von: neutrino am März 21, 2020, 20:28:47
Problem ist, in der Originalmeldung (Tabelle) ist ein zweizeiliger Text mit einem Zeilenumbruch enthalten.
Als Erstes wäre zu klären, was hier genau ein Zeilenumbruch ist.

Wenn du in einer Email eine Tabelle hast, dann handelt es sich um eine HTML-Email. Da solltest du in den HTML-Text schauen, um was es sich für einen Zeilenumbruch handelt. - Macht eh Sinn, du solltest ja idealerweise die ganze Tabelle entfernen, wenn die nur den Hinweis enthält.

Zusätzlich könnte noch ein "echter" Zeilenumbruch vorhanden sein. Den kannst du in Form der Konstante vbCrLf (ggfls auch nur CR oder LF) mit deinem Such-Text verketten.

Zitat von: neutrino am März 22, 2020, 13:24:16Ich kann entweder die 1. oder die 2. Zeile gezielt löschen, beide aber nicht. Habe auch versucht, 2 Makros (für jede Zeile eines) nacheinander in ThisOutlookSession einzukopieren.
Auch dieser etwas grobe Lösungsansatz könnte funktionieren. Du kannst aber nicht zweimal das NewMailEx-Ereignis behandeln; das wird sich nicht kompilieren lassen. Das ist auch nicht nötig. Du brauchst nur die Replace-Operation verdoppelt. Einmal für jede Zeile.





Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor