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. P>
É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. P>
Alors, comment puis-je faire cela dans mon programme VBA? J'ai essayé d'utiliser Screenshot Outlook:
P> mailitem.attadments code> mais toutes les pièces jointes sont là et je ne trouve aucune propriété d'entre eux peut être utilisée pour distinguer. P>
3 Réponses :
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--
Certaines pièces jointes ont toujours l'ID de contenu MIME ( pr_attach_content_id code>), en particulier, les messages de Lotus Notes ont toujours cet en-tête.
Le test réel consiste à vérifier la propriété htmlbody code> 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é.
P>
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.
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