أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

INFO: حفظ الرسائل إلى ملف مركب MSG

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

171907
الموجز
تحتوي هذه المقالة على تعليمات برمجية يوضح كيفية حفظ رسالة إلى مستند مركبة--بشكل خاص ملف .msg--يمكن قراءته من قبل أي عميل يعتمد تنسيق ملف .msg.
معلومات أخرى
يأخذ كائن رسالة صالح كمعلمة في الدالة أسفل ثم يستخدم خصائصه لإنشاء نسخة مكررة من الرسالة حفظ ملف المركب باستخدام تنسيق .msg. يتم استخدام سطر موضوع الرسالة على أنه اسم ملف ملف جديد.

ملاحظة: يؤدي حرف خاص في سطر الموضوع المعلمة في هذه الدالة نتائج غير متوقعة. بينما يمكن كتابة التعليمات البرمجية لتجنب أحرف خاصة في سطر الموضوع, غير germane الموضوع ولا يتم ترك مثل التعليمات البرمجية عن قصد.
#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;}				
تدعم كافة إصدارات Outlook و عميل Exchange CLSID_MailMessage كمستند المركبة. هو السبب الوحيد لاستخدام CLSID مختلفة في دعم العملاء الأخرى التي تستخدم CLISD مختلفة عند كتابة الرسائل إلى التخزين مصنفة.

عند حفظ الرسائل التي تحتوي على عدد كبير من المستلمين أو المرفقات ، من الممكن ستفشل عملية CopyTo مع MAPI_E_NOT_ENOUGH_MEMORY. يكون هذا بسبب وجود مشكلة معروفة التخزين مصنفة و الدفقات. إضافة كل مرة يتم فيها المرفق الجديد أو المستلم إلى الرسالة تم حفظها في التخزين مصنفة فتح "ملفات التخزين الجذر" الجديدة. لم يتم إغلاق هذه الملفات حتى يتم إتمام المعاملة. لأن نظام التشغيل فرض حد عدد ملفات التخزين الجذر مفتوحة في نفس الوقت, هناك لم طريقة المعالجة المعروفة. للحصول على معلومات إضافية، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
163202حد عدد ملفات المخزن الجذر فتح Simultaeously
تتأثر كافة إصدارات Outlook إلى هذا الحد.

تحذير: تمت ترجمة هذا المقال تلقائياً

خصائص

رقم الموضوع: 171907 - آخر مراجعة: 08/18/2005 18:00:56 - المراجعة: 2.5

  • Microsoft Office Outlook 2007
  • واجهة برمجة تطبيقات الرسائل من Microsoft
  • Microsoft Exchange Client 5.5
  • Microsoft Exchange Client 5.0
  • Microsoft Exchange Client 4.0
  • Microsoft Exchange Client 5.0
  • kbmt kbinfo kbmsg KB171907 KbMtar
تعليقات
s">