Em primeiro lugar, essa é uma tarefa complicada.
Você deve coletar respostas típicas de diferentes clientes de e-mail e preparar expressões regulares corretas (ou qualquer outra coisa) para analisá-las. Coletei respostas do outlook, thunderbird, gmail, apple mail e mail.ru.
Estou usando expressões regulares para analisar a resposta da seguinte maneira: se a expressão não corresponder, tento usar a próxima.
new Regex("From:\\s*" + Regex.Escape(_mail), RegexOptions.IgnoreCase)
new Regex("<" + Regex.Escape(_mail) + ">", RegexOptions.IgnoreCase)
new Regex(Regex.Escape(_mail) + "\\s+wrote:", RegexOptions.IgnoreCase)
new Regex("\\n.*On.*(\\r\\n)?wrote:\\r\\n", RegexOptions.IgnoreCase | RegexOptions.Multiline)
new Regex("-+original\\s+message-+\\s*$", RegexOptions.IgnoreCase)
new Regex("from:\\s*$", RegexOptions.IgnoreCase)
Para remover a cotação no final:
new Regex("^>.*$", RegexOptions.IgnoreCase | RegexOptions.Multiline);
Aqui está minha pequena coleção de respostas de teste (amostras divididas por --- ):
From: test@test.com [mailto:test@test.com]
Sent: Tuesday, January 13, 2009 1:27 PM
----
2008/12/26 <test@test.com>
> text
----
test@test.com wrote:
> text
----
test@test.com wrote: text
text
----
2009/1/13 <test@test.com>
> text
----
test@test.com wrote: text
text
----
2009/1/13 <test@test.com>
> text
> text
----
2009/1/13 <test@test.com>
> text
> text
----
test@test.com wrote:
> text
> text
<response here>
----
--- On Fri, 23/1/09, test@test.com <test@test.com> wrote:
> text
> text
Atenciosamente, Oleg Yaroshevych