Öffnen einer Anlage
Gilt für: Outlook 2013 | Outlook 2016
Das Öffnen einer Anlage umfasst das Anzeigen ihrer Daten. Wenn beispielsweise eine Dateianlage geöffnet wird, wird der Inhalt der Datei angezeigt. Während Nachrichten und Ordner mit ihren Eintragsbezeichnern geöffnet werden, werden Anlagen mit ihren Anlagennummern geöffnet – PR_ATTACH_NUM Eigenschaften. Weitere Informationen finden Sie unter PR_ATTACH_NUM (PidTagAttachNumber). Anlagennummern sind über die Anlagetabelle einer Nachricht verfügbar.
So öffnen Sie alle Anlagen in einer Nachricht
Rufen Sie die IMessage::GetAttachmentTable-Methode der Nachricht auf, um auf die zugehörige Anlagentabelle zuzugreifen.
Rufen Sie HrQueryAllRows auf, um alle Zeilen in der Tabelle abzurufen.
Für jede Zeile:
Öffnen Sie die Anlage, indem Sie die Anlagenummer übergeben, die in der PR_ATTACH_NUM Spalte in einem Aufruf der IMessage::OpenAttach-Methode der Nachricht dargestellt wird. Weitere Informationen finden Sie unter IMessage::OpenAttach. OpenAttach gibt einen Zeiger auf eine IAttach-Implementierung zurück, die Zugriff auf Anlageneigenschaften bietet.
Rufen Sie die IMAPIProp::GetProps-Methode der Anlage auf, um die PR_ATTACH_METHOD-Eigenschaft abzurufen. Weitere Informationen finden Sie unter IMAPIProp::GetProps und PR_ATTACH_METHOD (PidTagAttachMethod).
Wenn PR_ATTACH_METHOD auf ATTACH_BY_REF_ONLY festgelegt ist, rufen Sie IMAPIProp::GetProps auf, um die eigenschaft PR_ATTACH_PATHNAME abzurufen. Weitere Informationen finden Sie unter PR_ATTACH_PATHNAME (PidTagAttachPathname).
Wenn PR_ATTACH_METHOD auf ATTACH_BY_VALUE festgelegt ist, rufen Sie IMAPIProp::OpenProperty auf, um die eigenschaft PR_ATTACH_DATA_BIN mit der IStream-Schnittstelle zu öffnen. Sehen Sie sich den Beispielcode an, der diesem Verfahren folgt. Weitere Informationen finden Sie unter IMAPIProp::OpenProperty und PR_ATTACH_DATA_BIN (PidTagAttachDataBinary).
Wenn PR_ATTACH_METHOD auf ATTACH_OLE festgelegt ist und die Anlage ein OLE 2-Objekt ist:
Rufen Sie IMAPIProp::OpenProperty auf, um die eigenschaft PR_ATTACH_DATA_OBJ mit der IStreamDocfile-Schnittstelle zu öffnen. Versuchen Sie, diese Schnittstelle zu verwenden, da es sich um eine Implementierung von IStream handelt, die garantiert mit strukturiertem Speicher mit dem geringsten Aufwand arbeitet. Weitere Informationen finden Sie unter PR_ATTACH_DATA_OBJ (PidTagAttachDataObject).
Wenn der OpenProperty-Aufruf fehlschlägt, rufen Sie ihn erneut auf, um die eigenschaft PR_ATTACH_DATA_BIN mit der IStreamDocfile-Schnittstelle abzurufen.
Wenn dieser zweite OpenProperty-Aufruf fehlschlägt, versuchen Sie erneut, OpenProperty aufzurufen, um PR_ATTACH_DATA_OBJ abzurufen. Anstatt jedoch IStreamDocfile anzugeben, geben Sie die IStorage-Schnittstelle an.
Wenn PR_ATTACH_METHOD auf ATTACH_EMBEDDED_MSG festgelegt ist, ist es nicht ungewöhnlich, dass der Wert von PR_ATTACH_DATA_OBJ einen Fehler enthält. Dies liegt daran, dass Sie und der Tabellenimplementierer keine Möglichkeit haben, sich auf den Typ des zurückzugebenden Objekts zu einigen. Um einen Zeiger auf die angefügte Nachricht abzurufen, öffnen Sie die Anlage mit IMessage::OpenAttach. Greifen Sie dann auf die Anlagendaten zu, indem Sie die IMAPIProp::OpenProperty-Methode aufrufen. Weitere Informationen finden Sie unter IMessage::OpenAttach und IMAPIProp::OpenProperty.
Sie können anfordern, dass eine Anlage im Lese-/Schreibmodus oder im schreibgeschützten Modus geöffnet wird. Schreibgeschützt ist der Standardmodus, und viele Nachrichtenspeicheranbieter öffnen alle Anlagen in diesem Modus, unabhängig davon, was clients anfordern. Übergeben Sie das MAPI_BEST_ACCESS-Flag, um anzufordern, dass der Nachrichtenspeicheranbieter die höchste Zugriffsebene gewährt, und rufen Sie dann die PR_ACCESS_LEVEL-Eigenschaft der geöffneten Anlage ab, um die tatsächlich gewährte Zugriffsebene zu bestimmen. Weitere Informationen finden Sie unter PR_ACCESS_LEVEL (PidTagAccessLevel).
Das folgende Beispiel zeigt, wie die Daten in der PR_ATTACH_DATA_BIN-Eigenschaft einer Anlage geöffnet werden. Sie weist zwei Datenströmen Zeiger zu: einem für die Datei und einem für die Anlage. Die OpenStreamOnFile-Funktion öffnet den Dateistream im schreibgeschützten Modus. Der Aufruf der IMAPIProp::OpenProperty-Methode der Anlage öffnet den Anlagenstream im Lese-/Schreibmodus. Weitere Informationen finden Sie unter PR_ATTACH_DATA_BIN, OpenStreamOnFile und IMAPIProp::OpenProperty. Der Code kopiert dann aus dem Dateistream in den Anlagenstream und gibt beide Streams frei.
LPSTREAM pStreamFile, pStreamAtt;
HRESULT hr;
hr = OpenStreamOnFile (MAPIAllocateBuffer, MAPIFreeBuffer,
STGM_READ, "myfile.doc", NULL, &pStreamFile);
if (HR_SUCCEEDED(hr))
{
// Open the destination stream in the attachment object
hr = pAttach->OpenProperty (PR_ATTACH_DATA_BIN,
&IID_IStream,
0,
MAPI_MODIFY | MAPI_CREATE,
(LPUNKNOWN *)&pStreamAtt);
if (HR_SUCCEEDED(hr))
{
STATSTG StatInfo;
pStreamFile->Stat (&StatInfo, STATFLAG_NONAME);
hResult = pStreamFile->CopyTo (pStreamAtt, StatInfo.cbSize,
NULL, NULL);
pStreamAtt->Release();
}
pStreamFile->Release();
}