Поделиться через


Сохранение сообщения

Область применения: Outlook 2013 | Outlook 2016

Перед сохранением сообщения клиенты обычно вызывают метод IMAPIProp::SetProps сообщения, чтобы задать несколько свойств в дополнение к свойствам текста сообщения, свойствам вложений, PR_SUBJECT (PidTagSubject) и свойствам, связанным со списком получателей.

Задайте для свойства PR_MESSAGE_CLASS (PidTagMessageClass) строку символов, например IPM. Обратите внимание, что описывает класс исходящего сообщения. Хотя клиенты должны задавать PR_MESSAGE_CLASS для всех исходящих сообщений, поставщик хранилища сообщений предоставляет значение по умолчанию, если оно не задано. Класс сообщений по умолчанию для исходящих сообщений — IPM.

Задайте флаг MSGFLAG_UNSENT в свойстве PR_MESSAGE_FLAGS (PidTagMessageFlags). При необходимости также задайте флаги MSGFLAG_READ и MSGFLAG_UNMODIFIED. Задание MSGFLAG_UNMODIFIED позволяет сообщению в композиции имитировать доставленное сообщение. MSGFLAG_UNMODIFIED могут быть заданы клиентами только перед первым сохранением сообщения.

Когда вы будете готовы создать постоянную копию неотправленного сообщения, вызовите IMAPIProp::SaveChanges для сообщения и всех его вложений. Если вы собираетесь отправить сообщение сразу, вызывать SaveChanges не нужно. Вызов SubmitMessage внутренне сохраняет сообщение в процессе его обработки.

При вызове SaveChanges рекомендуется указать флаг KEEP_OPEN_READWRITE, который позволяет изменить сообщение позже. Другие устанавливаемые флаги включают FORCE_SAVE, которая указывает, что сообщение или вложение должно быть закрыто после фиксации изменений, KEEP_OPEN_READONLY, что указывает, что дальнейшие изменения не будут вноситься, и флаг, разрешающий поставщику хранилища сообщений пакетные клиентские запросы, MAPI_DEFERRED_ERRORS.

Прежде чем вызывать SaveChanges для каждого вложения в сообщении, необходимо вызвать Метод SaveChanges . Если не удается сохранить вложение, вложение не будет включено в сообщение при его отправке и оно не будет отображаться в таблице вложений сообщения. Если не удается сохранить сообщение после сохранения всех вложений, сообщение и вложения будут потеряны.

При вызове SaveChanges поставщик хранилища сообщений обновляет следующие свойства:

  • PR_DISPLAY_TO (PidTagDisplayTo) перечисляет всех основных получателей.

  • PR_DISPLAY_TO перечислены все получатели копии.

  • PR_DISPLAY_BCC (PidTagDisplayBcc) перечисляет всех получателей слепых копий.

  • PR_LAST_MODIFICATION_TIME (PidTagLastModificationTime)

  • PR_MESSAGE_FLAGS задает MSGFLAG_HASATTACH, если было сохранено одно или несколько вложений, и очищает MSGFLAG_UNMODIFIED, чтобы показать, что сообщение изменилось.

  • PR_MESSAGE_SIZE (PidTagMessageSize) содержит самый актуальный размер сообщения.

  • PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) предоставляет доступ к таблице вложений.

  • PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) предоставляет доступ к таблице получателей.

Некоторые свойства сообщения обычно предоставляются клиентами или поставщиками услуг при создании сообщения. Если клиент не задает их, поставщик хранилища сообщений будет обновлять их при вызове SaveChanges . Например, если при создании сообщения были заданы свойства PR_ENTRYID (PidTagEntryId) и PR_RECORD_KEY (PidTagRecordKey), их не нужно изменять в экономию времени. Однако поставщики хранилища сообщений, которые не задают их при создании сообщений, должны задавать их при первом вызове SaveChanges .

Если Функция SaveChanges возвращает MAPI_E_CORRUPT_DATA, предположим, что сохраненные данные теперь потеряны. Поставщики хранилища сообщений, использующие клиент-серверную модель для реализации, могут возвращать это значение, если сетевое подключение потеряно или сервер не работает. Прежде чем возвращать пользователю ошибку, попробуйте записать и сохранить данные во второй раз, выполнив вызов SetProps , а затем еще один вызов SaveChanges. Если данные кэшируются локально, это не должно быть проблемой. Однако если локального кэша нет или второй вызов SaveChanges завершается сбоем, отобразится сообщение об ошибке, чтобы предупредить пользователя о проблеме.