Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet

ΠΛΗΡΟΦΟΡΙΕΣ: Αποθήκευση μηνυμάτων σε αρχείο σύνθετων ΛΑΘΟΥΣ

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: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 (Knowledge Base):
163202Το όριο του αριθμού των Simultaeously Άνοιγμα ρίζας αποθήκευσης αρχείων
Όλες οι εκδόσεις του Outlook επηρεάζεται από αυτόν τον περιορισμό.

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί με μηχανική μετάφραση

Ιδιότητες

Αναγνωριστικό άρθρου: 171907 - Τελευταία αναθεώρηση: 12/18/2010 23:16:00 - Αναθεώρηση: 2.0

Microsoft Office Outlook 2007, Microsoft Messaging Application Programming Interface

  • kbinfo kbmsg kbmt KB171907 KbMtel
Σχόλια
cript"> Asimov.clickstreamTracker.init(); /html>.gif?DI=4050&did=1&t=">