Как определить, имеет ли Outlook цифровую подпись электронной почты по умолчанию? - PullRequest
1 голос
/ 28 июля 2010

Справочная информация: я работаю над надстройкой Outlook, которая добавляет вложение к исходящим электронным письмам.Поддержка требуется для всех версий Outlook.

Когда MailItem подписан цифровой подписью, добавление вложения к этому mailItem обычно завершается неудачно, если вы не сохраните почтовый элемент.Это удаляет подпись с mailitem.Для меня это несколько ожидаемое поведение.Ничего странного в этом нет.

Проблема в том, что пользователь включает цифровые подписи (через пользовательский интерфейс или как поведение Outlook по умолчанию), а затем снова выключает его.MailItem больше не подписан, но он по-прежнему ведет себя так, как будто он - мы не можем добавить вложение в это письмо.

Я нашел сообщение в группе новостей, которое может объяснить, почему;Похоже, что объекты, полученные через API outlook, не являются фактическими объектами.

http://www.tech -archive.net / Архив / Разработка / microsoft.public.win32.programmer.messaging / 2006-02/msg00000.html

На данный момент я перестал пытаться красиво решить эту проблему;сохранение MailItem во временный файл, по-видимому, исправляет это, однако по соображениям производительности мы хотели бы сохранить только, когда MailItem перешел от подписанного к неподписанному.Другой приемлемой альтернативой является обнаружение, включены ли цифровые подписи по умолчанию или нет.Хотя есть запись в реестре, связанная с настройкой цифровой подписи по умолчанию, это всего лишь предложение, и оно не отражает точно, было бы электронное письмо подписано по умолчанию или нет.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Вы можете использовать библиотеку API выкупа для вызова этого метода из C #.

Также вы пытались создать сигнатуру PInvoke из расширенного mapi dll?

0 голосов
/ 28 июля 2010

Оказывается, что вы можете использовать EMAPI в C ++ для вызова IMessagePtr-> SaveChanges (), что, кажется, работает довольно хорошо. К сожалению, вы не можете получить доступ к этому в C #.

...