Partager via


Enregistrement d’un message

S’applique à : Outlook 2013 | Outlook 2016

Avant l’enregistrement d’un message, les clients appellent généralement la méthode IMAPIProp ::SetProps du message pour définir quelques propriétés en plus des propriétés de texte du message, des propriétés de pièce jointe, des PR_SUBJECT (PidTagSubject) et des propriétés associées à la liste des destinataires.

Définissez la propriété PR_MESSAGE_CLASS (PidTagMessageClass) sur une chaîne de caractères telle que IPM. Notez que décrit la classe du message sortant. Bien que les clients doivent définir PR_MESSAGE_CLASS sur tous les messages sortants, une valeur par défaut est fournie par le fournisseur de la banque de messages si vous ne la définissez pas. La classe de message par défaut pour les messages sortants est IPM.

Définissez l’indicateur MSGFLAG_UNSENT dans la propriété PR_MESSAGE_FLAGS (PidTagMessageFlags). Si vous le souhaitez, définissez également les indicateurs MSGFLAG_READ et MSGFLAG_UNMODIFIED. La définition de la MSGFLAG_UNMODIFIED permet à un message sous composition de simuler un message remis. MSGFLAG_UNMODIFIED ne peut être défini par les clients qu’avant qu’un message n’ait été enregistré pour la première fois.

Lorsque vous êtes prêt à effectuer une copie permanente d’un message non envoyé, appelez IMAPIProp ::SaveChanges sur le message et toutes ses pièces jointes. Si vous envisagez d’envoyer le message immédiatement, vous n’avez pas besoin d’appeler SaveChanges. L’appel à SubmitMessage enregistre le message en interne dans le cadre de son traitement.

Lors de l’appel de SaveChanges, il est judicieux de spécifier l’indicateur KEEP_OPEN_READWRITE, ce qui permet de modifier le message ultérieurement. Les autres indicateurs définissables incluent FORCE_SAVE, qui indique que le message ou la pièce jointe doit être fermé une fois les modifications validées, KEEP_OPEN_READONLY, qui indique qu’aucune autre modification ne sera apportée, et l’indicateur permettant au fournisseur de magasin de messages de traiter par lot les demandes clientes, MAPI_DEFERRED_ERRORS.

Il est essentiel d’appeler SaveChanges pour chaque pièce jointe du message avant d’appeler SaveChanges pour le message. Si vous ne parvenez pas à enregistrer une pièce jointe, la pièce jointe n’est pas incluse dans le message lors de son envoi et elle n’apparaît pas dans la table des pièces jointes du message. Si vous ne parvenez pas à enregistrer le message après avoir enregistré toutes les pièces jointes, le message et les pièces jointes sont perdus.

Lorsque SaveChanges est appelé, le fournisseur de magasin de messages met à jour les propriétés suivantes :

  • PR_DISPLAY_TO (PidTagDisplayTo) répertorie tous les destinataires principaux.

  • PR_DISPLAY_TO répertorie tous les destinataires de la copie carbone.

  • PR_DISPLAY_BCC (PidTagDisplayBcc) répertorie tous les destinataires de copie carbone aveugles.

  • PR_LAST_MODIFICATION_TIME (PidTagLastModificationTime)

  • PR_MESSAGE_FLAGS définit MSGFLAG_HASATTACH si une ou plusieurs pièces jointes ont été enregistrées et efface MSGFLAG_UNMODIFIED pour indiquer que le message a changé.

  • PR_MESSAGE_SIZE (PidTagMessageSize) contient la taille la plus actuelle du message.

  • PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) permet d’accéder à la table des pièces jointes.

  • PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) permet d’accéder à la table des destinataires.

Certaines propriétés de message sont généralement fournies par des clients ou des fournisseurs de services lors de la création d’un message. Si un client néglige de les définir, c’est au fournisseur de la banque de messages de les mettre à jour au moment de l’appel de SaveChanges . Par exemple, si les propriétés PR_ENTRYID (PidTagEntryId) et PR_RECORD_KEY (PidTagRecordKey) d’un message ont été définies lors de la création du message, elles n’ont pas besoin d’être modifiées au moment de l’enregistrement. Toutefois, les fournisseurs de magasins de messages qui négligent de les définir lors de la création du message doivent les définir la première fois que SaveChanges est appelé.

Si SaveChanges retourne MAPI_E_CORRUPT_DATA, supposons que les données enregistrées sont maintenant perdues. Les fournisseurs de magasins de messages qui utilisent un modèle client-serveur pour leur implémentation peuvent retourner cette valeur lorsqu’une connexion réseau est perdue ou que le serveur n’est pas en cours d’exécution. Avant de renvoyer une erreur à l’utilisateur, essayez d’écrire et d’enregistrer les données une deuxième fois en effectuant un appel à SetProps suivi d’un autre appel à SaveChanges. Si les données sont mises en cache localement, cela ne devrait pas poser de problème. Toutefois, s’il n’y a pas de cache local ou si le deuxième appel SaveChanges échoue, affichez une erreur pour avertir l’utilisateur du problème.