Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hace referencia a: Outlook 2013 | Outlook 2016
Un cliente puede usar uno de los cuatro métodos para copiar o mover un mensaje o una carpeta:
Al establecer las marcas y los parámetros adecuados, CopyTo y CopyProps se pueden hacer para que funcionen igual que CopyFolder o CopyMessages. Tenga en cuenta los siguientes problemas al decidir qué método llamar:
¿Está copiando o moviendo una carpeta o un mensaje?
¿Cuánto sabe sobre la carpeta o el mensaje que se va a mover o copiar?
¿Cuántas propiedades de la carpeta o del mensaje se moverán o copiarán?
Puede usar los métodos IMAPIProp para copiar o mover una carpeta o un mensaje. IMAPIFolder::CopyMessages solo funciona con mensajes; IMAPIFolder::CopyFolder solo funciona con carpetas.
Mientras que el uso de los métodos IMAPIFolder no requiere ningún conocimiento de las propiedades admitidas por la carpeta o el mensaje que se va a copiar o mover, debe tener algún conocimiento para usar los métodos IMAPIProp . Con IMAPIProp::CopyProps, debe poder especificar explícitamente cuál de las propiedades de carpeta o mensaje desea copiar o mover. Con IMAPIProp::CopyTo, a menos que quiera copiar o mover todas las propiedades, debe especificar explícitamente cuáles deben excluirse. Para obtener más información sobre estos métodos, vea Copiar propiedades MAPI.
El número de propiedades que se van a copiar o mover puede afectar a la decisión sobre qué método usar. Si va a copiar o mover varios mensajes, llame a IMAPIFolder::CopyMessages. Una opción alternativa es llamar a IMAPIProp::CopyProps para copiar solo la propiedad PR_CONTAINER_CONTENTS (PidTagContainerContents) de la carpeta. En el procedimiento siguiente se muestra cómo usar CopyMessages.
Para copiar o mover uno o varios mensajes
Busque identificadores de entrada válidos para las carpetas de origen y destino.
Abra estas carpetas en modo de lectura y escritura llamando a IMAPISession::OpenEntry o IMsgStore::OpenEntry y estableciendo la marca de MAPI_MODIFY.
Compruebe que el puntero de interfaz devuelto de OpenEntry es un puntero de interfaz IMAPIFolder . Si no es así, conéctelo al tipo LPMAPIFOLDER.
Cree una matriz de identificadores de entrada que representen uno o varios mensajes que se van a copiar o mover.
Llame a IMAPIFolder::CopyMessages con las siguientes marcas establecidas:
MESSAGE_MOVE, si desea realizar una operación de movimiento.
MESSAGE_DIALOG y pase un identificador de ventana en el parámetro ulUIParam , si desea que la carpeta muestre un indicador de progreso.
Libere los punteros IMAPIFolder para las carpetas de origen y destino.
Si desea copiar el contenido completo de una carpeta en otra carpeta, llame al método IMAPIFolder::CopyFolder o IMAPIProp::CopyTo de la carpeta de origen.
Para copiar algunas de las propiedades de una carpeta, llame a su método IMAPIProp::CopyProps . Para copiar la mayoría de las propiedades de una carpeta, llame a IMAPIProp::CopyTo.
Por ejemplo, si desea copiar las propiedades PR_DISPLAY_NAME (PidTagDisplayName) y PR_COMMENT (PidTagComment) de una carpeta, tiene las siguientes opciones:
Llame a IMAPIFolder::CopyFolder para copiar todas las propiedades de carpeta y, a continuación, elimine las no deseadas de la nueva carpeta.
Llame a CopyTo y excluya todas las propiedades de la carpeta, excepto PR_DISPLAY_NAME yPR_COMMENT.
Llame a CopyProps, pasando PR_DISPLAY_NAME y PR_COMMENT en la matriz include.
En este caso, CopyProps es la mejor opción porque está pensado para usarse para copiar un pequeño conjunto de propiedades y es la llamada más fácil de implementar.
Para copiar o mover solo las propiedades de carpeta, sin incluir mensajes, llame al método IMAPIProp::CopyTo de la carpeta y excluya las siguientes propiedades:
PR_CONTAINER_CONTENTS (PidTagContainerContents)
PR_FOLDER_ASSOCIATED_CONTENTS (PidTagFolderAssociatedContents)
Los métodos de copia pueden devolver S_OK, lo que indica el éxito total, MAPI_W_PARTIAL_COMPLETION, lo que indica un éxito parcial o un error. Si se devuelve MAPI_W_PARTIAL_COMPLETION, use la macro HR_FAILED para obtener acceso a un error más específico. Para obtener más información, vea Uso de macros para el control de errores.
Si copia mensajes de un almacén de mensajes a otro y Unicode no es compatible con ambos, tenga en cuenta que la información se puede perder debido a la conversión de páginas de códigos. Normalmente no se puede saber si los almacenes de mensajes admiten uno o ambos formatos, lo que hace imposible determinar si se deben copiar propiedades de texto como cadenas ASCII o como cadenas Unicode. Si admite Unicode, intente realizar una copia Unicode; Si se produce un error con el valor de error MAPI_E_BAD_CHARWIDTH, recurra a ASCII.