Почему размеры встроенных изображений оцениваются в 0 в надстройке Outlook VSTO? - PullRequest
0 голосов
/ 04 февраля 2019

Мы создаем надстройку VSTO для Outlook, которая сканирует исходящие почтовые сообщения на наличие вложений, чтобы предупредить пользователей и обнаружила неожиданное поведение.

Рассматриваются следующие способы добавления файла в почтовое сообщение Outlook:

  1. Вложение файла
  2. Снимок экрана
  3. Отсечение экрана
  4. Файл подписи почты

Все четыре распознаются каквложения при возникновении события Отправка элемента:

  Private Sub Application_ItemSend(ByVal Item As Object, ByRef Cancel As Boolean) Handles Application.ItemSend

В следующем примере кода:

For Each attachment As Outlook.Attachment In Item.Attachments
'do some stuff like check attachment size 
Next

Мы проверяем наличие небольших встроенных изображений в файле подписи, которые не нужно уведомлятьпользователь.

В следующих случаях:

  • Снимок экрана
  • Отсечение экрана
  • Файл подписи почты

Мы 'мы заметили, что когда добавленные файлы являются внедренными изображениями (не вложениями), мы не видим правильное свойство размера для изображения, используя:

attachment.Size

IE: скажем, мы отправляем электронное письмо Outlook, которое имеет:

  • Одно вложение.
  • Один снимок экрана.
  • Один файл подписи с одним изображением.

Кажется, наш кодраспознавать правильное количество вложений, однако, если мы проверяем размер вложения для снимка экрана или изображения файла подписи, свойство размера вложения всегда оценивается в 0, что, как нам кажется, связано с тем, что файл не существуетна диске и прикрепленном файле.

For Each attachment As Outlook.Attachment In Item.Attachments
   if attachment.size > 755 then
       'ignore the image
   end if
Next

Есть ли способ проверить размер изображения в VB.Net или нам нужно сохранить файл во временном каталоге, чтобы сделать это?

РЕДАКТИРОВАТЬ Устранение неполадок с шпионским Outlookteps:

  1. Новое почтовое сообщение
  2. Вставленный снимок экрана и файл подписи:

enter image description here

OutlookSpy-> IMessage

Пустое окно сообщения (ниже)

Step 4

Закрыть окно IMessage.

Повторно открыть окно IMessage

Отображаются вставленные (прикрепленные) файлы (ниже)

Step 7 8. Двойной щелчок на вложении

Double Click attach/size

Выбранная кнопка инспектора

Inspector

Текущий пункт:

Current Item

Просмотр:

Browse

Вложения:

Attachments

Просмотр:

Browse 2

IEnumVariant:

enter image description here

Я подозреваю, что различия между шагами 4 и 7 могут быть связаны с тем, что Outlook мог сохранитьчерновик почтового сообщения?

ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Добавлен код для сохранения почтового сообщения перед проверкой размера подписи / встроенного изображения:

'convert generic object to Outlook.MailItem object.
Dim objMailItem As Outlook.MailItem = CType(Item, Outlook.MailItem)
'Save message
objMailItem.Save()
'quick check to see if message is saved (it is)
Dim saved As Boolean = objMailItem.Saved()

For Each attachment As Outlook.Attachment In objMailItem.Attachments
    'all items still evaluate to 0.
    If attachment.Size >= 20 Then
        'do some stuff
    End If
Next

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

В итоге мы использовали Outlook Spy (удивительный инструмент ..), чтобы найти свойство PR_ATTACH_SIZE:

Затем настройте с использованием схемы MS следующим образом:

'property access to get attachment sizes
 Const PR_ATTACH_SIZE As String = "http://schemas.microsoft.com/mapi/proptag/0x0E200003"

Также отличная информация от this SO Post.

Затем перебираем нашу коллекцию вложений следующим образом, чтобы найти размеры наших вложений:

For Each attachment As Outlook.Attachment In Item.Attachments
  attSize = CType(attachment.PropertyAccessor.GetProperty(PR_ATTACH_SIZE), Integer)
  if attSize.size > 755 then
   'ignore the image
   end if
Next

Спасибо ..

0 голосов
/ 04 февраля 2019

Размер вложения (который включает в себя необработанные двоичные данные, а также свойства каждого вложения) обновляется поставщиком магазина при сохранении сообщения.Сначала убедитесь, что вы звоните MailItem.Save.

...