Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Outlook 2013 | Outlook 2016
Клиент может использовать один из четырех методов для копирования или перемещения сообщения или папки:
Установив соответствующие флаги и параметры, copyTo и CopyProps можно заставить работать так же, как CopyFolder или CopyMessages. При принятии решения о том, какой метод следует вызывать, учитывайте следующие проблемы:
Копируете или перемещаете папку или сообщение?
Сколько вы знаете о папке или сообщении для перемещения или копирования?
Сколько свойств папки или сообщения будет перемещено или скопировано?
Методы IMAPIProp можно использовать для копирования или перемещения папки или сообщения. IMAPIFolder::CopyMessages работает только с сообщениями; IMAPIFolder::CopyFolder работает только с папками.
В то время как использование методов IMAPIFolder не требует каких-либо знаний о свойствах, поддерживаемых папкой или сообщением для копирования или перемещения, необходимо иметь некоторые знания, чтобы использовать методы IMAPIProp . При использовании IMAPIProp::CopyProps необходимо явно указать, какие свойства папки или сообщения нужно скопировать или переместить. В IMAPIProp::CopyTo, если вы не хотите копировать или перемещать все свойства, необходимо явно указать, какие из них следует исключить. Дополнительные сведения об этих методах см. в разделе Копирование свойств MAPI.
Количество свойств для копирования или перемещения может повлиять на решение о том, какой метод следует использовать. При копировании или перемещении нескольких сообщений вызовите IMAPIFolder::CopyMessages. Другой вариант — вызвать IMAPIProp::CopyProps , чтобы скопировать только свойство PR_CONTAINER_CONTENTS папки (PidTagContainerContents). В следующей процедуре показано, как использовать CopyMessages.
Копирование или перемещение одного или нескольких сообщений
Найдите допустимые идентификаторы записей для исходной и целевой папок.
Откройте эти папки в режиме чтения и записи, вызвав IMAPISession::OpenEntry или IMsgStore::OpenEntry и установив флаг MAPI_MODIFY.
Убедитесь, что указатель интерфейса, возвращаемый из OpenEntry , является указателем интерфейса IMAPIFolder . Если нет, приведите его к типу LPMAPIFOLDER.
Создайте массив идентификаторов записи, представляющих одно или несколько сообщений для копирования или перемещения.
Вызовите IMAPIFolder::CopyMessages со следующими флагами:
MESSAGE_MOVE, если вы хотите выполнить операцию перемещения.
MESSAGE_DIALOG и передайте дескриптор окна в параметре ulUIParam , если вы хотите, чтобы папка отображала индикатор хода выполнения.
Отпустите указатели IMAPIFolder для исходной и целевой папок.
Если вы хотите скопировать полное содержимое папки в другую папку, вызовите метод IMAPIFolder::CopyFolder исходной папки или IMAPIProp::CopyTo .
Чтобы скопировать несколько свойств папки, вызовите ее метод IMAPIProp::CopyProps . Чтобы скопировать большую часть свойств папки, вызовите IMAPIProp::CopyTo.
Например, если требуется скопировать свойства PR_DISPLAY_NAME папки (PidTagDisplayName) и PR_COMMENT (PidTagComment), у вас есть следующие параметры:
Вызовите IMAPIFolder::CopyFolder , чтобы скопировать все свойства папки, а затем удалить ненужные свойства из новой папки.
Вызовите CopyTo и исключите все свойства папки, кроме PR_DISPLAY_NAME и PR_COMMENT.
Вызовите CopyProps, передав PR_DISPLAY_NAME и PR_COMMENT в массиве include.
В этом случае copyProps является лучшим выбором, так как он предназначен для копирования небольшого набора свойств и является самым простым вызовом для реализации.
Чтобы скопировать или переместить только свойства папки, не включая сообщения, вызовите метод IMAPIProp::CopyTo папки и исключите следующие свойства:
PR_CONTAINER_CONTENTS (PidTagContainerContents)
PR_FOLDER_ASSOCIATED_CONTENTS (PidTagFolderAssociatedContents)
Методы копирования могут возвращать S_OK, указывающие на общий успех, MAPI_W_PARTIAL_COMPLETION, частичный успех или ошибку. Если возвращается MAPI_W_PARTIAL_COMPLETION, используйте макрос HR_FAILED для доступа к более конкретной ошибке. Дополнительные сведения см. в разделе Использование макросов для обработки ошибок.
Если вы копируете сообщения из одного хранилища сообщений в другое и юникод не поддерживается обоими, имейте в виду, что информация может быть потеряна из-за преобразования кодовой страницы. Как правило, невозможно узнать, поддерживают ли хранилища сообщений один или оба формата, поэтому невозможно определить, следует ли копировать свойства текста в виде строк ASCII или в виде строк Юникода. Если вы поддерживаете Юникод, попробуйте выполнить копирование Юникода. В случае сбоя со значением ошибки MAPI_E_BAD_CHARWIDTH, прибегите к ASCII.