none
Mail Anhänge unterscheiden RRS feed

  • Frage

  • Hallo Experten,

    Mails sollen in einer DB abgelegt werden, wobei die Attachments ebenfalls als getrennte Dokumente abgelegt werden sollen.

    Die Attachments aus der Mail zu separieren ist kein Problem. Aber, wenn im Mailtext jemand ein z.B. ein Bild(in der Regel ein Firmenlogo in der Signatur) einfügt und gleichzeitig z.B. ein Bild als Anhang einfügt stehen beide als Attachment in der Mail. Wie kann ich nun das eine vom anderem unterscheiden?

    Dim mailAttachments As Outlook.Attachments = oODoc.Attachments If Not IsNothing(mailAttachments) Then For i As Integer = 1 To mailAttachments.Count Dim currentAttachment As Outlook.Attachment = mailAttachments.Item(i) If Not IsNothing(currentAttachment) Then ... End If Next Marshal.ReleaseComObject(mailAttachments) End If End If

    Donnerstag, 25. Januar 2018 07:57

Antworten

  • Servus Stefan,

    gelesen, aber die Art die dort beschrieben wird scheint mir ein wenig, sagen wir mal, umständlich. Aber, da lag die Spur zum Erfolg drin. Ich habe das ganz jetzt mit einer Funktion gelöst(ob diese alle Varianten abdeckt muss ich noch feststellen):

     Public Function Mailattachment_isEmbedded(attachment As Outlook.Attachment) As Boolean
    	'Nicht vergessen: Imports Microsoft.Office.Interop
    
            If attachment.Type <> Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue Then
                Return True
            End If
    
            Dim iPropertyTemp As Integer = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37050003")
            If iPropertyTemp = 6 Then
                Return True
            End If
    
            iPropertyTemp = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37140003")
            If iPropertyTemp = 4 Then
                Return True
            End If
    
            Return False
        End Function

    Der folge Code zeigt den Aufruf und Auswertung:

     If Not Mailattachment_isEmbedded(xAttachment) Then
    	'Ist ein Attachment
     Else
     	'Ist kein Attachment sondern ein Objekt im Mailbody bzw. Mailtext
     End If

    mfg m.m.w.


    PS: Wollte noch eine Link einfügen wurde aber vom System verweigert !?!?!?!?
    • Bearbeitet IWV Donnerstag, 25. Januar 2018 09:11
    • Als Antwort markiert IWV Donnerstag, 25. Januar 2018 13:37
    Donnerstag, 25. Januar 2018 09:10

Alle Antworten

  • Hi,

    die Attachment Klasse von Outlook hat ja verschiedene Eigenschaften, bspw. Index, DisplayName, usw. Darüber kannst Du doch eine Unterscheidung vornehmen!?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Januar 2018 08:04
    Moderator
  • Servus Stefan,

    tja auf die Idee bin ich auch schon gekommen aber leider konnte ich nicht ein Merkmal finden was das eine vom anderem unterscheidet.

    Ein Unterscheidung von Index oder Name ist nicht Zielführend. Da der Index abhängig ist in welcher Reihenfolge das Bild in der Mail oder das Bild im Anhang ein- bzw. angefügt wurde. Auch der Name hilft nicht, wie auch, beide Attachments haben eine Bezeichnung, das sagt aber nichts darüber aus ob es sich um einen echten Anhang handelt oder um einen der im Mailtext eingefügt wurde.

    mfg m.m.

    Donnerstag, 25. Januar 2018 08:14
  • Hi,

    dann hatte ich das falsch verstanden.

    Du willst also Inline Attachments von "normalen" Attachments unterscheiden?

    Lies dich bitte mal in diesen SO Thread ein:

      Accessing inline and bar attachments

    In HTML Mails sind Inline Attachments oftmals im HTML Code mit einer Referenz im Format cid:<Name> enthalten.

    Andere Optionen findest Du im o.g. Thread.

    Wenn das nicht hilft, wüsste ich leider auch nichts.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Januar 2018 08:43
    Moderator
  • Servus Stefan,

    gelesen, aber die Art die dort beschrieben wird scheint mir ein wenig, sagen wir mal, umständlich. Aber, da lag die Spur zum Erfolg drin. Ich habe das ganz jetzt mit einer Funktion gelöst(ob diese alle Varianten abdeckt muss ich noch feststellen):

     Public Function Mailattachment_isEmbedded(attachment As Outlook.Attachment) As Boolean
    	'Nicht vergessen: Imports Microsoft.Office.Interop
    
            If attachment.Type <> Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue Then
                Return True
            End If
    
            Dim iPropertyTemp As Integer = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37050003")
            If iPropertyTemp = 6 Then
                Return True
            End If
    
            iPropertyTemp = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37140003")
            If iPropertyTemp = 4 Then
                Return True
            End If
    
            Return False
        End Function

    Der folge Code zeigt den Aufruf und Auswertung:

     If Not Mailattachment_isEmbedded(xAttachment) Then
    	'Ist ein Attachment
     Else
     	'Ist kein Attachment sondern ein Objekt im Mailbody bzw. Mailtext
     End If

    mfg m.m.w.


    PS: Wollte noch eine Link einfügen wurde aber vom System verweigert !?!?!?!?
    • Bearbeitet IWV Donnerstag, 25. Januar 2018 09:11
    • Als Antwort markiert IWV Donnerstag, 25. Januar 2018 13:37
    Donnerstag, 25. Januar 2018 09:10