9
votes

Distinguer les pièces jointes visibles et invisibles avec Outlook VBA

L'exigence est de télécharger des pièces jointes à un serveur. Cependant, nous voulons seulement télécharger ceux-ci apparaissent dans la ligne "Message" (voir la photo ci-dessous) d'Outlook, rien d'autre dans l'organisme de messagerie.

Étant donné que Outlook lui-même sait quelle pièce jointe doit être montrée dans la ligne, il doit y avoir des informations qu'il utilise pour les distinguer en interne.

Alors, comment puis-je faire cela dans mon programme VBA? J'ai essayé d'utiliser mailitem.attadments mais toutes les pièces jointes sont là et je ne trouve aucune propriété d'entre eux peut être utilisée pour distinguer.

mise à jour Le titre original "distinguer les pièces jointes embachées avec Outlook VBA" est un peu trompeur. Donc, j'ai changé le titre.

Screenshot Outlook: Screenshot d'Outlook


0 commentaires

3 Réponses :


15
votes

Comme je peux tester jusqu'à présent, une pièce jointe intégrée a toujours un identifiant de contenu MIME, que cela apparaisse dans le corps du courrier. Donc, la solution consiste à vérifier s'il a un identifiant de contenu.

Voici un exemple de code qui compte les pièces jointes visibles: P>

Message-ID: <1044564324.2.1360638429705.JavaMail.joe@xxxx>
Subject: Test
MIME-Version: 1.0
Content-Type: multipart/alternative; 
    boundary="----=_Part_0_1327112367.1360638429515"
Return-Path: xxxx@xxxx.xxx
X-OriginalArrivalTime: 12 Feb 2013 03:07:16.0096 (UTC) FILETIME=[0FC1B000:01CE08CE]

------=_Part_0_1327112367.1360638429515
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

TTT
------=_Part_0_1327112367.1360638429515
Content-Type: multipart/related; 
    boundary="----=_Part_1_1747887937.1360638429520"

------=_Part_1_1747887937.1360638429520
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<html><head><meta http-equiv=3D'content-type' content=3D'text/html; charset=
=3DUTF-8'></head><title>TTT</title><body><img src=3D"cid:test1.png" alt=3D'=
=E6=81=AD=E8=B4=BA=E6=96=B0=E7=A6=A7' /><p>txt</p></body></html>
------=_Part_1_1747887937.1360638429520
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <test.png>

iVBORw0KGgoAAAANSUhEUgAAAIIAAAAmCAYAAAAIjkMFAAABHUlEQVR42u3Z0Q7CIAyFYd//pafx
ckFoS9ELvz8aE9mQrIfTFh8PAAAAAPgp1+t1vT9i32fm6FzP6JrKb3aulRAGARm9Z9dUAhWZY7Wm
7Hr+IvhdD+s+PhLCLNBZQZ12HI7QlBqyQohctxM8bvAFIcx2eEYIo/vuY5WAi3BzWlhZ+if7zs7T
UWtE10Asgd3bUSxWHvrMobJOtXITQkjk5Z3gdaWaqBBWouYIhdy+E+TsPNHU0CUEbjDJ49GxE0KI
nBNUheAcYbPVy9QNmRaxUvVHd7Idf0gU2QDOduVqnkinoEb4QY1Q3V2RNrMqpB0h6BqKh0gZIWT/
AzjVycwcjSMcPI3buSebZiptaLbIBQAAAAAAAAAAAAAAAP6OJyO5jJ4bZa/gAAAAAElFTkSuQmCC

------=_Part_1_1747887937.1360638429520--

------=_Part_0_1327112367.1360638429515--


0 commentaires

2
votes

Certaines pièces jointes ont toujours l'ID de contenu MIME ( pr_attach_content_id ), en particulier, les messages de Lotus Notes ont toujours cet en-tête.
Le test réel consiste à vérifier la propriété htmlbody et voir si des pièces jointes sont réellement référencées par les balises IMG. Redemption vous permet de distinguer la pièce jointe comme celle-ci à l'aide du ridéachment.Choride propriété.


8 commentaires

Merci pour ça; Pouvez-vous expliquer est-ce lié aux perspectives? Parce que nous nous concentrons sur les perspectives et nous ne sommes pas intéressés par des notes de Lotus.


Les courriels envoyés de Lotus Notes à Outlook auront cet en-tête MIME. J'essayais simplement de donner un exemple lorsque pr_attach_content_id Vérification de la propriété retournera toujours un mauvais résultat.


Merci pour vos informations, j'ai mis à jour la réponse pour inclure vos conseils.


Bonjour Dmitry Streblechenko Pouvez-vous regarder la mise à jour de ma propre réponse et me donner des conseils sur la manière de résoudre le problème? Merci.


Comme je l'ai déjà mentionné, le seul moyen sûr est de charger le corps HTML et de vérifier quelles pièces jointes sont réellement utilisées dans les balises IMG.


Vous ne l'avez pas eu; Ce que j'ai trouvé, c'est que même le corps HTML n'utilise pas la pièce jointe dans une étiquette IMG, la pièce jointe peut toujours être masquée (c'est-à-dire non montrée dans la ligne de fixation).


Cela ne peut arriver que si pt_attch_hiden propriété est défini sur ce message. La question initiale posée sur les pièces jointes intégrées.


Merci pour ça. Le titre original est trompeur et je l'ai mis à jour. Si vous regardez le texte de la question, il est correct. Ce que je veux vraiment, c'est une visibilité, pas l'incorporation.



1
votes

Basé sur la réponse par @earth Moteur, c'est une fonction renvoyer le nombre réel de pièces jointes lors du passage d'un mailItem (item.class = olmail) en tant que paramètre:

Function CountVisibleAttachment(ByVal m As MailItem) As Integer
    Const PR_ATTACH_CONTENT_ID As String = "http://schemas.microsoft.com/mapi/proptag/0x3712001F"
    Const PR_ATTACHMENT_HIDDEN As String = "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"

    Dim a As Attachment
    Dim pa As propertyAccessor
    Dim c As Integer
    Dim cid As String

    Dim body As String

    c = 0

    body = m.HTMLBody

    For Each a In m.Attachments
        Set pa = a.propertyAccessor
        cid = pa.GetProperty(PR_ATTACH_CONTENT_ID)

        If Len(cid) > 0 Then
            If InStr(body, cid) Then
            emb = emb + 1
            Else
                'In case that PR_ATTACHMENT_HIDDEN does not exists,
                'an error will occur. We simply ignore this error and
                'treat it as false.
                On Error Resume Next
                If Not pa.GetProperty(PR_ATTACHMENT_HIDDEN) Then
                    c = c + 1
                End If
                On Error GoTo 0
            End If
        Else
            c = c + 1
        End If
    Next a
    CountVisibleAttachment = c
End Function


0 commentaires