Как определить, является ли почтовый элемент Exchange автоматическим ответом?
У меня есть приложение.NET, которое опрашивает почтовый ящик Exchange на наличие новых сообщений по расписанию. Дальнейшая обработка происходит при обнаружении новых сообщений в почтовом ящике электронной почты. Я столкнулся с проблемой обработки при получении сообщений автоответчика в почтовый ящик [например, правило автоответа или сообщения об отсутствии на работе].
Мне нужно решение C#, чтобы определить, является ли почтовый элемент Exchange автоматическим ответом. Есть ли в почтовом элементе атрибут, который указывает, является ли сообщение автоответчиком?
5 ответов
Поработав с этой проблемой некоторое время, я решил использовать самый простой подход.
Используя веб-службу Exchange (exchange.asmx), доступную для Exchange 2007, я решил просто проверить строку темы каждого почтового элемента, чтобы увидеть, не содержит ли он "Нет на месте", прежде чем продолжить через логику обработки. Все сообщения, с которыми я имел дело, были сообщениями с автоматическим ответом, которые содержали строку темы "Нет на месте".
Я уверен, что я столкнусь с дополнительными случаями использования автоответчиков, которые не имеют "Out of Office", которые мне придется учитывать в будущем. В то время я либо изменю код, чтобы проверить строку темы по массиву возможных строк темы, либо продолжу поиск какого-либо дополнительного атрибута в элементе почты, который указывает сообщение автоответчика.
Я почти уверен, что дополнительным атрибутом является значение "Return-Path:" в заголовке почтового элемента, но я не нашел простого способа получить этот атрибут. Из того, что я могу сказать, если "Return-Path" имеет значение "<>", это сообщение автоответчика, в противном случае у него будет действительный адрес электронной почты.
Посмотрите на наличие заголовка:
X-Auto-Response-Suppress
Это флаг, который Exchange добавляет к автоматизированным сообщениям, чтобы они не вызывали другие автоматические сообщения. Это звучит как ваш конкретный вариант использования. Есть определенные флаги, которые можно установить, но в моем случае я просто не отправлял ответы независимо от того, какие флаги были установлены.
Информация об автоответчике является частью заголовка, а иногда и предмета и тела. Все зависит от сервера, который сделал автоответчик.
Я лично использую сторонний компонент для помощи в разборе электронных писем. Это называется ListNanny.
Он имеет механизм синтаксического анализа и файл определения и может помочь с некоторыми дополнительными типами отчетов о недоставке, такими как жесткие и программные отскоки, ChallengeVerification, электронные письма DnsError и другие.
Если я получу обратно "Неизвестный" тип с помощью ListNanny, то я предполагаю, что это правильный адрес электронной почты
Надеюсь это поможет
РЕДАКТИРОВАТЬ:
После комментария. Мое другое предложение было бы создать пару различных типов сообщений автоответчика.
Оттуда вы просматриваете заголовки электронных писем вручную, находите записи, которые могут указывать, что это сообщение автоответчика (которое не отображается в обычном сообщении), а затем записываете свой собственный анализатор электронной почты, если электронное письмо содержит какой-либо из этих авто Ответьте "подпись", а затем отметьте его как таковой.
Я могу только сказать вам, что, когда вы начинаете, у вас, скорее всего, будет много ложных или положительных электронных писем, но это станет лучше через некоторое время, и после того, как вы обработаете больше писем и уточните свою подпись,
Извините, я не мог помочь вам с примерами кода или другими идеями.
Кажется, что если вы используете управляемый API Exchange EWS, вы можете проверить ItemClass в Exchange "item". Это указывает, является ли это задачей, событием, документом, электронной почтой и т. Д.
Это также указывает, является ли это OofTemplate или NDR (отказов). Некоторые из классов перечислены здесь:
https://docs.microsoft.com/en-us/office/vba/outlook/Concepts/Forms/item-types-and-message-classes
Так что основная идея была бы проверить...
if(item.ItemClass != "IPM.Note")
... тогда это не электронная почта и / или автоответчик
Да, есть атрибут, но он называется
InternetMessageHeaders
и это не просто один, поскольку у нас есть несколько серверов обмена электронной почтой, и они следуют собственному стандарту.
Вот список заголовков, которые можно проверить:
Auto-Submitted: auto-replied
X-Auto-Response-Suppress:all
Precedence: auto_reply
X-Autoreply: yes
Auto-Submitted: auto-generated