2016-08-04 14 views
0

Ich weiß, wie Sie Dateien zu MailItem.Attachments hinzufügen, aber wie überprüfe ich, ob die Datei bereits zu den Anlagen hinzugefügt wurde?MailItem Attachments - Überprüfen, ob die Datei bereits angehängt ist

Zum Beispiel habe ich den Dateinamen "C:\\myFolder\\myFile.txt". Wie überprüfe ich, ob diese Datei bereits angehängt ist oder nicht? Ich brauche das, um zu verhindern, dass eine Datei doppelt an eine neue E-Mail angehängt wird.

Hier ist, was ich bisher:

var mItem = Outlook.Interfaces.HostAddIn.Application.ActiveInspector().CurrentItem as MailItem; 

if (mItem != null) 
{ 
    //this works fine but I need to check if already attached first like below 
    //mItem.Attachments.Add(localFilePath); 

    bool found = false; 
    string attachments = ""; 
    for (int i = 1; i <= mItem.Attachments.Count; i++) 
    { 
     attachments += 
      "DisplayName: " + mItem.Attachments[i].DisplayName //shows just myFile.txt, no path 
      + "/FileName: " + mItem.Attachments[i].FileName //shows just myFile.txt, no path 
      + "/PathName: " + mItem.Attachments[i].PathName; //shows "" 

     //I tried here PathName, FileName, DisplayName but all return just name, without the path 
     if (mItem.Attachments[i].PathName == localFilePath) 
     { 
      found = true; 
     } 
    } 
    if (!found) 
    { 
     mItem.Attachments.Add(localFilePath); //attach only if not already attached 
    } 
} 

Antwort

1

Was Sie haben, ist ziemlich viel, was Sie tun können - FileName wird übereinstimmen, PathName wird immer leer sein, und DisplayName die gleiche wie FileName sein.

Sie können auch die alten und vorhandenen Dateigrößen vergleichen, aber nicht Attachment.Size verwenden, da sie die Größe der MAPI-Eigenschaften sowie die tatsächlichen Dateidaten enthält.

Vergessen Sie auch nicht zu überprüfen, dass Attachmeent.Type == olByValue: Sie nur regelmäßige Anhänge wollen.

Sie können auch (wenn der Dateiname übereinstimmt) den vorhandenen Anhang in einen temporären Ordner (Attachment.SaveAsFile) speichern und Dateigrößen vergleichen. Wenn sie übereinstimmen, können Sie auch den Kontext vergleichen (z. B. einen CRC berechnen).

Beachten Sie, dass Sie nicht direkt mit OOM auf Anlagendaten zugreifen können, wenn Sie Extended MAPI (IAttach::OpenProperty(PR_ATTACH_DATA_BIN, IID_IStream, ...)) oder Redemption (Attachment.AsText/AsArray/etc.) Andernfalls müssen Sie Attachment.SaveAsFile verwenden und dann die temporäre Datei löschen.

+0

Danke Dmitry. Gibt es keine Möglichkeit, nur den Pfad und den Dateinamen auf den Pfad und den Dateinamen der Datei zu überprüfen, die ich angehängt habe? Ich füge eine Datei zu den Anlagen hinzu, die den Pfad + fileName der Datei zur Verfügung stellen. Ich bin überzeugt, dass ich nicht von bereits angehängten Dateien das gleiche bekommen kann. – pixel

+1

Nein, die Pfadinformationen werden niemals gespeichert, es sei denn, es handelt sich um eine Referenzdatei. Auf der MAPI-Ebene spielen Dateien nicht einmal eine Rolle - die Daten kommen als IStream in die Eigenschaft PR_ATTACH_DATA_BIN. –

+0

Danke eine Million Dmitry – pixel

Verwandte Themen