ahstax
Goto Top

Unterscheidung eingebundene und angehängte Anlagen

Hallo,

gibt es eine Möglichkeit, Anlagen einer E-Mail daraufhin zu überprüfen, ob diese bereits im Mailkörper "eingebunden" verwendet wurden (z.B. als Logo in einer Signatur) oder ob diese Anlage "völlig getrennt" vom Mailkörper ist?

Hintergrund:
Ich möchte eingehende E-Mails drucken, speichere dazu die Mail und die Anlagen getrennt ab. "Eingebundene" Anlagen werden bis dato wie einfach angefügte Dateien behandelt.

Mit diesem Code speichere ich die Anlagen bis jetzt ab:

...
For i = 1 To intAnlagen 'Anlagen im vordefinierten Verzeichnis sichern  
   objNewMailItem.Attachments.Item(i).SaveAsFile(strMailSpeicherBenennung & "_" & .Attachments.Item(i).FileName)  
Next i
...

Neugierige Grüße,
Andreas

(Outlook 2010, VB2010Express)

Content-ID: 213519

Url: https://administrator.de/forum/unterscheidung-eingebundene-und-angehaengte-anlagen-213519.html

Ausgedruckt am: 08.04.2025 um 16:04 Uhr

colinardo
colinardo 06.08.2013 um 15:27:01 Uhr
Goto Top
Hallo Andreas,
sieh dir diesen Thread mal an, da hatte ich schon eine Lösung dafür präsentiert, jedoch mit einem kostenpflichtigen Plugin.

Grüße @colinardo
ahstax
ahstax 06.08.2013 um 16:03:36 Uhr
Goto Top
Hallo colinario,

Danke für Deinen Tipp, ich werde mit das ansehen.

Gibt es vielleicht auch eine kostenfreie Möglichkeit?

Grüße,
Andreas
colinardo
colinardo 06.08.2013 aktualisiert um 16:31:09 Uhr
Goto Top
Zitat von @ahstax:
Gibt es vielleicht auch eine kostenfreie Möglichkeit?
Nun, man könnte die Attachments identifizieren indem man den HTML-Body auf das vorkommen des Attachment-Filenames prüft. Ist dieser im Body vorhanden sollte es ein Inline-Attachment sein:

Beispiel: (Das MailItem musst du natürlich noch zuweisen)
Dim itm As MailItem
set itm = ........
Dim att As Attachment
For Each att In itm.Attachments
    If InStr(1, itm.HTMLBody, att.FileName, vbTextCompare) > 0 Then
        'Attachment wird im Body verwendet  
        Debug.Print "'" & att.FileName & "' ist ein Inline Attachment!"  
    else
        'Attachment ist ein richtiger Anhang  
        debug.print "'" att.Filename & "' ist ein richtiges Attachment"   
    End If
Next

Wenn der Nutzer aber den Dateinamen im Mailtext erwähnt, klappt diese Variante nicht. Hier müsste man dann via Regular Expressions den Inhalt genauer prüfen um z.B. Bilder-Tags (<img.../>) auszufiltern.

Grüße @colinardo
ahstax
ahstax 07.08.2013 um 16:00:45 Uhr
Goto Top
Hallo colinardo,

immer wieder begeistert! face-wink

Funktioniert so etwas auch mit einem Word-Dokument? Im Moment speicher ich die E-Mail, zu der die fraglichen Anlagen gehören, als olDoc ab...
Allerdings wäre ein Abspeichern sowohl als HTML als auch als olDoc auch möglich mit anschließender Prüfung und "Ausschluss"...

Grüße,
Andreas
colinardo
colinardo 07.08.2013 aktualisiert um 16:17:25 Uhr
Goto Top
(nur zur Info das oben war nur VBA zum testen in Outlook)
Die Überprüfung setzt auf den HTML-Code der Mail, da in diesem der Name des Inline-Attachments auftaucht wenn es denn eins ist, du musst also zum überprüfen diesen vorhalten. Mach die Überprüfung vor der Speicherung und verfrachte dort die Attachments in die passenden Ordner.

Grüße Uwe
ahstax
ahstax 09.08.2013 um 08:52:41 Uhr
Goto Top
Mir ist da noch was eingefallen.
In der eigentlichen Mail werden als Anlage ja nur diejenigen Anlagen genannt, die "tatsächlich" Anlagen sind. Ist Outlook selbst "klever" genug, um das unterscheiden zu können? Ich nehme mal an, dass man das nicht nutzen kann, sonst müsste man vermutlich den "Umweg" über das oben beschriebene Vorgehen nicht wählen...?
colinardo
colinardo 09.08.2013 um 12:21:19 Uhr
Goto Top
Zitat von @ahstax:
Mir ist da noch was eingefallen.
In der eigentlichen Mail werden als Anlage ja nur diejenigen Anlagen genannt, die "tatsächlich" Anlagen sind. Ist
Outlook selbst "klever" genug, um das unterscheiden zu können? Ich nehme mal an, dass man das nicht nutzen kann,
sonst müsste man vermutlich den "Umweg" über das oben beschriebene Vorgehen nicht wählen...?
Diese Funktion stellt Outlook den Nutzern leider nicht via Code zur Verfügung...
ahstax
ahstax 28.11.2013 um 16:14:24 Uhr
Goto Top
Ich hab da mal noch was gefunden...:
KLICK

ist dann bei mir so geworden:

...
Dim value1 As String = .Attachments.item(i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E")  
Dim value2 As Long = .Attachments.item(i).PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37140003")  
 
   If (Not (value1) Is Nothing) Then
      If (Not (value2) = 4) Then
          '  "echter" Anhang  
...


Allen beteiligten herzlichen Dank!!!