У меня есть почтовый сервер X, который действует как посредник между клиентами (A) нашего апплета обратной связи, созданного для использования на их веб-сайтах, и клиентами (B) наших клиентов.
Итак, всякий раз, когда B отправляет электронное письмо A, оно проходит через X, где мы украшаем его, чтобы придать ему особый вид. У нас есть особый метод пересылки, при котором мы прикрепляем идентификатор к каждому сообщению, проходящему через сервер.
Проблема: Бесконечные циклы создаются, если и A, и C имеют автоматические ответы.
Как можно предотвратить то же самое?
Решения, о которых мы думали до сих пор:
Составьте словарь правдоподобных слов, которые можно использовать в методах «В гостях».
Проблема: Не исчерпывающий.
Не разрешать более «X» сообщений между двумя сторонами за один день.
Проблема: Ограничивает законное использование.
Не разрешать более «X» сообщений между двумя сторонами за один день.
Почти правильно, теперь посмотрим, насколько быстро происходят автоматические ответы по сравнению с легитимными сообщениями; если вы реализуете лимит флуда, вы разрешите типичные сообщения, не допуская быстрого лавинного потока из-за автоматических ответов.
Итак, установите «X сообщений за Y минут» или что-то в этом роде.
в дополнение к «ограничению x количества сообщений в y времени на адрес» есть несколько индикаторов того, что сообщение генерируется автоматически и поэтому, вероятно, не должно пересылаться.
проверьте, например, следующие заголовки (и УСТАНОВИТЕ ИХ в вашем почтовом сервере пересылки, так что хорошо работающие реализации вне офиса даже не отвечают на ваше приложение)
precedence: bulk/list/junk
x-precedence: bulk/list/junk
auto-submitted: auto-replied
X-Auto-Response-Suppress: ALL/DR/NDR/RN/NRN/OOF/AutoReply
x-autoresponse
Кроме того, в некоторых реализациях вне офиса в качестве отправителя конверта используется не адрес электронной почты пользователя, а что-то вроде postmaster @ или нулевого отправителя.
Я перечислил еще несколько показателей в этом вопросе stackoverflow но я не уверен, что они применимы в вашем случае.
Было бы здорово получить дополнительную информацию, но в отсутствие этого я предполагаю, что вы можете делать все, что захотите. Я также предполагаю, что эти автоответы цитируют сообщение, на которое они отвечают.
Таким образом, если ваш объем и вычислительная мощность позволяют это, почему бы не поискать повторяющиеся ответы в шаблоне ABAB? То есть, если вы видите следующее, верните его добрым сообщением, в котором говорится, что сходство ответов аналогично тому, которое генерируется автоматическими ответами:
From: Adam
Sent: Wednesday, January 03, 2013 9:10 AM
To: Box Co
Subject: RE: That thing
I'm on vacation and will get back to you on January 10.
-Adam
From: Box Co
Sent: Wednesday, January 03, 2013 9:11 AM
To: Adam
Subject: RE: That Thing
We are closed in order to observe the Tamaseseri Festival and will return tomorrow.
Box Co
Where the boxes are best!
From: Adam
Sent: Wednesday, January 03, 2013 9:10 AM
To: Box Co
Subject: RE: That thing
I'm on vacation and will get back to you on January 10.
-Adam
From: Box Co
Sent: Wednesday, January 03, 2013 9:08 AM
To: Adam
Subject: RE: That Thing
We are closed in order to observe the Tamaseseri Festival and will return tomorrow.
Box Co
Where the boxes are best!
From: Adam
Sent: Wednesday, January 03, 2013 9:07 AM
To: Box Co
Subject: That thing
Do you have that thing I put in the box?
-Adam
Сделайте что-нибудь вроде /\nSubject.*\n([.\n]*?)\nFrom/
чтобы найти, что каждая сторона отправила друг другу, и сравнить на предмет сходства в шаблоне ABAB. Вам нужно будет удалить эффекты автоматического отступа и т. Д.
Это непростое решение, но я считаю, что его можно заставить работать и свести к минимуму ложные срабатывания и ложные отрицания.