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


Создание вложения к сообщению

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

Вложение сообщения — это некоторые дополнительные данные, такие как файл, другое сообщение или объект OLE, которые можно отправить или сохранить вместе с сообщением. Каждое вложение имеет коллекцию свойств, которые идентифицируют его и описывают его тип и способ отрисовки. Как и у получателей, доступ к вложениям сообщений можно получить только через сообщение, к которому они принадлежат. Поэтому, чтобы вложение было пригодным для использования, его сообщение должно быть открыто.

Создание вложения сообщения

  1. Вызовите метод IMessage::CreateAttach сообщения и передайте null в качестве идентификатора интерфейса. CreateAttach возвращает число, которое однозначно идентифицирует новое вложение в сообщении. Номер вложения хранится в свойстве PR_ATTACH_NUM (PidTagAttachNumber) и действителен только до тех пор, пока открыто сообщение, содержащее вложение.

  2. Вызовите IMAPIProp::SetProps , чтобы задать PR_ATTACH_METHOD (PidTagAttachMethod), чтобы указать, как получить доступ к вложению. PR_ATTACH_METHOD является обязательным. Задайте для него значение:

    • ATTACH_BY_VALUE, если вложение является двоичными данными.

    • ATTACH_BY_REFERENCE, ATTACH_BY_REF_RESOLVE или ATTACH_BY_REF_ONLY, если вложение является файлом.

    • ATTACH_EMBEDDED_MSG, если вложение является сообщением.

    • ATTACH_OLE, если вложение является объектом OLE.

  3. Задайте соответствующее свойство данных вложения:

  4. Задайте PR_ATTACH_RENDERING (PidTagAttachRendering) для хранения графического представления вложения для файловых или двоичных вложений. Не устанавливайте его для объектов OLE, в которых данные отрисовки хранятся внутри, или для вложенных сообщений.

  5. Задайте PR_RENDERING_POSITION (PidTagRenderingPosition), чтобы указать, где должно отображаться вложение. PR_RENDERING_POSITION применяется только к клиентам, которые задают свойство PR_BODY . Если вы поддерживаете только PR_RTF_COMPRESSED, поместите в сжатый поток следующие сведения о заполнителях:

    \objattph

    Чтобы задать PR_RENDERING_POSITION, назначьте число, представляющее порядковое смещение в символах, с первым символом PR_BODY равным 0, если необходимо знать, где в сообщении отображается вложение, или 0xFFFFFFFF, если вложения не отображаются в пределах PR_BODY.

  6. Задайте PR_ATTACH_FILENAME (PidTagAttachFilename), чтобы указать короткое имя файла для вложения файла, и PR_ATTACH_LONG_FILENAME (PidTagAttachLongFilename), чтобы указать имя файла, поддерживаемое на платформе, обрабатывающей формат длинного имени файла. Оба свойства являются необязательными. Однако если задать PR_ATTACH_LONG_FILENAME, также задать PR_ATTACH_FILENAME.

  7. Задайте PR_DISPLAY_NAME (PidTagDisplayName), чтобы указать имя вложения, которое может отображаться в диалоговом окне. PR_DISPLAY_NAME является необязательным.

Настройка PR_ATTACH_DATA_BIN

  1. Вызовите IMAPIProp::OpenProperty , чтобы открыть свойство с помощью интерфейса IStream .

  2. Если файл содержит данные и он открыт или требуется явный контроль над размером буфера, вызовите IStream::Write в цикле, чтобы поместить данные в поток.

  3. Другой вариант — вызвать OpenStreamOnFile , чтобы создать поток для доступа к файлу данных, а затем вызвать метод IStream::CopyTo этого потока, чтобы скопировать данные в поток, возвращенный OpenProperty.

  4. Вызовите метод IStream::Commit нового потока.

Настройка PR_ATTACH_DATA_OBJ

  1. Вызовите IMAPIProp::OpenProperty , чтобы открыть свойство с интерфейсом IStreamDocfile , чтобы создать поток, работающий со структурированным хранилищем. IStreamDocfile реализуется поставщиками хранилища сообщений, чтобы предоставить клиентам более высокопроизводительный способ хранения и извлечения структурированного хранилища. Интерфейс IStreamDocfile совпадает с интерфейсом IStream, но содержимое потока гарантированно будет отформатировано как структурированное хранилище. Если этот вызов выполнен успешно, создайте поток, выполнив те же действия, которые описаны для настройки PR_ATTACH_DATA_BIN.

  2. Если сбой OpenProperty :

    1. Снова вызовите OpenProperty , запросив IStorage.

    2. Вызовите StgOpenStorage , чтобы открыть объект OLE и вернуть объект хранилища.

    3. Вызовите метод IStorage::CopyTo возвращенного объекта хранилища, чтобы скопировать его в объект хранилища, возвращенный из OpenProperty.

    4. Вызовите метод IStorage::Commit нового объекта хранилища.

Настройка PR_ATTACH_PATHNAME

  1. Выделите структуру SPropValue , задав элементу ulPropTagзначение PR_ATTACH_PATHNAME а элементу Value.LPSZ — символьную строку, представляющую имя файла.

  2. Вызовите метод IMAPIProp::SetProps вложения.

Примечание.

Если платформа поддерживает длинные имена файлов, задайте как PR_ATTACH_PATHNAME , так и PR_ATTACH_LONG_PATHNAME. Возможно, потребуется выполнить вызов операционной системы, чтобы получить короткое имя файла.

См. также