Удаление предыдущей части из писем с ответами - PullRequest
6 голосов
/ 21 сентября 2010

Я пытаюсь написать приложение, которое периодически получает электронные письма. Он пишет каждое письмо в базу данных. Но иногда я получаю электронную почту Re:, которая выглядит примерно так:

Новое сообщение

21 сентября 2010 г. 24:26 Кто-то писал (а):

| Старое сообщение |

Формат зависит от поставщика электронной почты.

Есть ли какая-либо библиотека, которая помогает удалить часть 'Re' из сообщения электронной почты? Может быть, сервер IMAP может сделать это? У меня есть все предыдущие электронные письма из цепочки в базе данных, чтобы я мог взять их и искать в новом сообщении.

Ответы [ 4 ]

2 голосов
/ 30 сентября 2010

Если вы можете связать ответное (RE :) сообщение с исходным / предыдущим сообщением, на которое оно является ответом, то я думаю, что вы могли бы получить основной текст исходного / предыдущего сообщения из вашей базы данных, а затем удалите этот текст из тела ответа. Однако этот метод не будет точным на 100%, поскольку клиенты могут преобразовывать электронные письма в формате HTML / Rich Text в обычный текст или наоборот. В любом таком случае этот метод, вероятно, не будет работать. Несмотря на это, этот метод будет общим и, вероятно, будет работать большую часть времени.

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

Я бы порекомендовал ориентироваться на нескольких действительно крупных провайдеров веб-почты (Gmail, Yahoo, Microsoft и т. Д.), Изучить форматы, которые они используют для своих ответов, и соответствующим образом проанализировать сообщения. Кроме того, вы также можете обрабатывать несколько общих форматов. Например, символ «>» обычно используется в начале каждой строки цитируемого текста в ответе.

Если вы собираетесь разрабатывать на языке, подобном C #, создайте себе интерфейс, подобный IReplyFormat, с соответствующей реализацией для каждого провайдера и, возможно, некоторыми общими форматами.

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

1 голос
/ 25 сентября 2010

Лично я думаю, что вам здесь не повезло, так как копия сообщения является частью тела. Поэтому для его удаления вам нужно будет обработать тело сообщения и написать метод извлечения для каждого известного формата (очевидно, проблема в том, что вы не можете знать все возможные форматы).

Итак, вместо того, чтобы анализировать тело, почему бы вам не сохранить все сообщение в базе данных? Обычно размер сообщения не должен быть проблемой с современной СУБД. Если это действительно проблема, вы всегда можете сжать тело и сохранить его в BLOB.

0 голосов
/ 01 октября 2010

Я согласен с Obalix.Слишком сложно отфильтровать ответы, поэтому необходимо сохранить все сообщение.Однако, когда вы отправляете электронное письмо пользователю, вы можете скрыть некоторые его части.Эти части могут быть показаны с дополнительным «Нажмите здесь, чтобы увидеть полное сообщение» или аналогичным.Например, регулярное выражение для фильтрации символов «>» будет выглядеть примерно так: @"^[ \f\t\v>]*"

0 голосов
/ 25 сентября 2010
  1. Никакой IMAP-сервер не будет и ничего не удаляет
  2. Такой библиотеки не существует, потому что нет стандарта, каждый провайдер электронной почты делает это по-своему, Gmail и т. Д. Разработали свои собственные инструменты
  3. Вы должны искать шаблон, который каким-то образом начинается с заголовков с получателем в качестве отправителя, например ...
From: <receipent>
From: "NAME" <receipent>
From: receipent

, и вы должны опустить частииз этой строки ниже, однако, только проверки этого будет недостаточно, так как обычно от него следуют субъект, cc, to и т. д., поэтому необходимо проверить шаблон.Я думаю, что какой-то проект с открытым исходным кодом или текстовая библиотека могут существовать, но их слишком сложно найти в Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...