Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

INFO: Message in verbundenes MSG-Datei speichern

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 171907
Zusammenfassung
Dieser Artikel enthält Code, der veranschaulicht, wie eine Nachricht um ein Verbunddokument--insbesondere eine MSG-Datei – speichern, die von jedem Client lesbar ist, die das Format der .msg-Datei unterstützt.
Weitere Informationen
Die Funktion unten eine gültige Nachrichten-Objekt als in-Parameter annimmt und dessen Eigenschaften verwendet, um eine Kopie der Nachricht erstellen und speichern es in einer Verbunddatei MSG-Format. Die Betreffzeile der Nachricht wird als die Namen der neuen Datei verwendet.

Hinweis: Sonderzeichen in der Betreffzeile des Parameters in dieser Funktion können zu unerwartete Ergebnissen führen. Während der Code geschrieben werden kann, um Sonderzeichen in die Betreffzeile zu vermeiden, es ist nicht zum Thema germane und solcher Code absichtlich ausgelassen.
#define INITGUID#include <objbase.h>#define USES_IID_IMessage#include <mapix.h>#include <mapitags.h>#include <mapidefs.h>#include <mapiutil.h>#include <mapiguid.h>#include <imessage.h>// {00020D0B-0000-0000-C000-000000000046}DEFINE_GUID(CLSID_MailMessage,0x00020D0B,0x0000, 0x0000, 0xC0, 0x00, 0x0, 0x00, 0x0, 0x00, 0x00, 0x46);HRESULT SaveToMSG ( LPMESSAGE pMessage ){    HRESULT hRes = S_OK;    LPSPropValue pSubject = NULL;    LPSTORAGE pStorage = NULL;    LPMSGSESS pMsgSession =  NULL;    LPMESSAGE pIMsg = NULL;    SizedSPropTagArray ( 7, excludeTags );    char szPath[_MAX_PATH];    char strAttachmentFile[_MAX_PATH];    LPWSTR lpWideCharStr = NULL;    ULONG cbStrSize = 0L;    // create the file name in the directory where "TMP" is defined    // with subject as the filename and ".msg" extension.    // get temp file directory    GetTempPath(_MAX_PATH, szPath);    // get subject line of message to copy. This will be used as the    // new file name.    HrGetOneProp( pMessage, PR_SUBJECT, &pSubject );    // fuse path, subject, and suffix into one string    strcpy ( strAttachmentFile, szPath );    strcat ( strAttachmentFile, pSubject->Value.lpszA  );    strcat ( strAttachmentFile, ".msg");    // get memory allocation function    LPMALLOC pMalloc = MAPIGetDefaultMalloc();    // Convert new file name to WideChar    cbStrSize = MultiByteToWideChar (CP_ACP,                                     MB_PRECOMPOSED,                                     strAttachmentFile,                                     -1, lpWideCharStr, 0);    MAPIAllocateBuffer ( cbStrSize * sizeof(WCHAR),                            (LPVOID *)&lpWideCharStr );    MultiByteToWideChar (CP_ACP,                         MB_PRECOMPOSED,                         strAttachmentFile,                         -1, lpWideCharStr, cbStrSize );    // create compound file    hRes = ::StgCreateDocfile(lpWideCharStr,                              STGM_READWRITE |                              STGM_TRANSACTED |                              STGM_CREATE, 0, &pStorage);    // Open an IMessage session.    hRes = ::OpenIMsgSession(pMalloc, 0, &pMsgSession);    // Open an IMessage interface on an IStorage object    hRes = ::OpenIMsgOnIStg(pMsgSession,                            MAPIAllocateBuffer,                            MAPIAllocateMore,                            MAPIFreeBuffer,                            pMalloc,                            NULL,                            pStorage,                            NULL, 0, 0, &pIMsg);    // write the CLSID to the IStorage instance - pStorage. This will    // only work with clients that support this compound document type    // as the storage medium. If the client does not support    // CLSID_MailMessage as the compound document, you will have to use    // the CLSID that it does support.    hRes = WriteClassStg(pStorage, CLSID_MailMessage );    // Specify properties to exclude in the copy operation. These are    // the properties that Exchange excludes to save bits and time.    // Should not be necessary to exclude these, but speeds the process    // when a lot of messages are being copied.    excludeTags.cValues = 7;    excludeTags.aulPropTag[0] = PR_ACCESS;    excludeTags.aulPropTag[1] = PR_BODY;    excludeTags.aulPropTag[2] = PR_RTF_SYNC_BODY_COUNT;    excludeTags.aulPropTag[3] = PR_RTF_SYNC_BODY_CRC;    excludeTags.aulPropTag[4] = PR_RTF_SYNC_BODY_TAG;    excludeTags.aulPropTag[5] = PR_RTF_SYNC_PREFIX_COUNT;    excludeTags.aulPropTag[6] = PR_RTF_SYNC_TRAILING_COUNT;    // copy message properties to IMessage object opened on top of    // IStorage.    hRes = pMessage->CopyTo(0, NULL,                            (LPSPropTagArray)&excludeTags,                            NULL, NULL,                            (LPIID)&IID_IMessage,                            pIMsg, 0, NULL );    // save changes to IMessage object.    pIMsg -> SaveChanges ( KEEP_OPEN_READWRITE );    // save changes in storage of new doc file    hRes = pStorage -> Commit(STGC_DEFAULT);    // free objects and clean up memory    MAPIFreeBuffer ( lpWideCharStr );    pStorage->Release();    pIMsg->Release();    CloseIMsgSession ( pMsgSession );    pStorage = NULL;    pIMsg = NULL;    pMsgSession = NULL;    lpWideCharStr = NULL;    return hRes;}				
alle Versionen von Outlook und Exchange-Client unterstützen CLSID_MailMessage als zusammengesetzte Dokument. Mit eine andere CLSID ist nur mit verschiedenen CLISD beim Schreiben von Nachrichten auf strukturierte Speicherung andere Clients unterstützen.

Wenn Nachrichten gespeichert, die eine große von Empfängern oder Anlagen Anzahl, ist es möglich, dass der CopyTo-Vorgang mit MAPI_E_NOT_ENOUGH_MEMORY fehlschlagen. Dies ist ein bekanntes Problem mit strukturiertem Speicher und Datenströme. Jedes Mal, die eine neue Anlage oder Empfänger hinzugefügt, an die Nachricht in strukturierten Speicherdatei gespeichert wird eine neue Stamm-Speicherdatei geöffnet wird. Diese Dateien sind nicht geschlossen, bis die Transaktion abgeschlossen ist. Da das Betriebssystem ein Limit für die Anzahl der gleichzeitig geöffneten Stamm Storage-Dateien erzwungen, ist keine bekannte Problemumgehung. Weitere Informationen finden Sie die Artikel der Microsoft Knowledge Base:
163202Beschränkung der Anzahl der Simultaeously Open Root-Speicherdateien
Alle Outlook-Versionen sind von dieser Einschränkung sowie betroffen.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 171907 – Letzte Überarbeitung: 08/18/2005 18:00:56 – Revision: 2.5

Microsoft Office Outlook 2007, Microsoft Messaging Application Programming Interface, Microsoft Exchange Client 5.5, Microsoft Exchange Client 5.0, Microsoft Exchange Client 4.0, Microsoft Exchange Client 5.0

  • kbmt kbinfo kbmsg KB171907 KbMtde
Feedback
1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" >