EWS: получение не только вложений из подписанных писем

Я пытаюсь создать систему, которая будет перехватывать электронные письма, приходящие на различные адреса электронной почты, и каталогизировать их вместе со всеми их вложениями. Эти вложения - это все файлы, которые нам нужно загрузить в другую систему. В настоящее время мы используем макросы Outlook, чтобы отбросить все вложения в каталог и загрузить их таким образом. К сожалению, этот метод не позволяет легко отследить, какие электронные письма имели какие вложения. Если мы хотим обеспечить учет каждого полученного документа, нам нужен более надежный подход.

Итак, я создаю службу Windows на основе EWS. Идея в том, что он будет подписываться на все адреса электронной почты, которыми я хочу управлять. Таким образом, он будет знать обо всех новых письмах, каталогизировать их и отслеживать вложения. Он хорошо работает для большинства электронных писем, но отправленные безопасным образом электронные письма должны быть просмотрены человеком (поскольку для этих писем требуется вход на безопасный сервер где-нибудь, чтобы просмотреть сообщение и загрузить вложения). Но в электронных письмах с цифровой подписью я просто загружаю вложение с именем smime.p7m. Я нашел сообщение на этом форуме, в котором показано, как получать вложения, но что насчет того, если тело письма имеет цифровую подпись? Есть ли способ извлечь и это?

Я решил использовать подход MimeKit, описанный здесь (это не принято ответ, но некоторые из ответов относятся к MimeKit, поэтому я решил проверить его, и он выглядит многообещающим).

Мой текущий подход заключается в том, что если тело электронного письма не было подписано цифровой подписью, я могу загрузить его в свою систему прямо из основного электронного письма. Но если он имеет цифровую подпись, то мне нужно получить его из файла smime.p7m, и именно здесь у меня возникнут проблемы. Однако у меня нет проблем с использованием примеров для извлечения вложений. В настоящее время у меня нет примеров тела электронной почты с цифровой подписью. Но я хотел бы проявить инициативу и найти решение, прежде чем это произойдет, и пользователь спросит, почему отсутствует тело письма. В качестве альтернативы было бы не менее полезно знать, если это невозможно, и единственная часть электронного письма, которая будет иметь цифровую подпись, - это вложения (в этом случае я могу полностью игнорировать это). На самом деле это был бы лучший сценарий!


person SlipEternal    schedule 02.07.2020    source источник


Ответы (1)


Обычно, когда сообщение подписывается с помощью S / MIME, подписывается все сообщение (включая тело и вложения).

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

Если вы хотите обработать какой-либо сценарий, просто убедитесь, что вы обработали все MultipartSigned части и / или ApplicationPkcs7Mime части в сообщении, и тогда вы обязательно обработаете все сценарии (другими словами, не предполагайте, что есть только когда-либо из них).

person jstedfast    schedule 02.07.2020
comment
Возможно ли, что сообщение электронной почты EWS будет иметь тело, а вложение smime.p7m от EWS также будет иметь один или несколько элементов TextPart? Я определенно не был готов к этому. Хорошо, мне придется пересмотреть свою стратегию. - person SlipEternal; 03.07.2020
comment
Да, возможно, что после извлечения содержимого из smime.p7m (с помощью метода Verify ()) вы можете получить несколько TextParts. Для получения дополнительной информации о структуре сообщений см. github.com/jstedfast/MailKit/blob/master/ - это игнорирует подписанные части, но просто представьте, что каждый из этих примеров встроен в подписанный часть, и вы поймете идею. - person jstedfast; 03.07.2020