Compartir a través de


Copiar o mover un mensaje o una carpeta

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

  1. Busque identificadores de entrada válidos para las carpetas de origen y destino.

  2. Abra estas carpetas en modo de lectura y escritura llamando a IMAPISession::OpenEntry o IMsgStore::OpenEntry y estableciendo la marca de MAPI_MODIFY.

  3. Compruebe que el puntero de interfaz devuelto de OpenEntry es un puntero de interfaz IMAPIFolder . Si no es así, conéctelo al tipo LPMAPIFOLDER.

  4. Cree una matriz de identificadores de entrada que representen uno o varios mensajes que se van a copiar o mover.

  5. 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.

  6. 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:

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.