2017-03-14 9 views
0

私は転送された電子メールを管理していて、私がTextSearchQuery(SearchTerm.FromContains, "[email protected]")を実行すると、電子メールの元の送信者ではなく、転送者の固有IDを取得するだけであることに注意してください。メールキット:転送された電子メールから元の送信者を取得できますか?

私はTextBodyまたはHtmlBodyに潜んでいて、 "from"を見ることができますが、これはクライアントの言語などによって異なる可能性があるので、実行する方法があるかどうか疑問に思っていました"深い検索クエリ"。

SearchTermがたくさんありますが、まだ存在しなければSearchTerm.OriginalFromContainsが面白いかもしれません!

ありがとうございました。

答えて

1

IMAPがサポートしていないため、あなたが望むことを行う方法はありません。 MailKitの検索APIは、IMAPプロトコルの検索機能に限定されています(残念ながら、限定的です)。

+0

返信いただきありがとうございます。/ – Gonzo345

+1

@ Gonzo345それは、メール/ RFC2822形式の一部ではなく、本文にあるフリーフォームのテキストだけです。 – Max

+0

@Max私は手作業で手に入れる方法に取り組んでいますが、物事はかなり曇っています。少なくとも私は "簡単なやり方"でそれをやろうとした。 – Gonzo345

1

耐火ソリューションではありませんが、実際には電子メールのすべての「mailTo」を検索してリストし、リストの具体的なドメインを除外するオプションをユーザに与えます。

最後に最後のmailToを取得します。

private string ExtractMailTo(string html, string domainToExclude) 
{ 
    try 
    { //Searches for mailTos with regEx 
     //If user didn't pass any domain we will just ignore it 
     //and pick up the last mailTo. 
     bool deleteDomainUser = (!string.IsNullOrEmpty(domainToExclude) 
      || !string.IsNullOrWhiteSpace(domainToExclude)); 

     var mailTos = new List<String>(); 
     string pattern = @"mailto\s*:\s*([^""'>]*)"; 
     foreach (Match match in Regex.Matches(html, pattern)) 
      mailTos.Add(match.Groups[1].Value); 

     if(deleteDomainUser) 
      //We search for the domain concreted by the user 
      //and we delete it from the mailTos List 
      mailTos.RemoveAll(doms => doms.Contains(domainToExclude)); 
     var last = mailTos.Last(); 
     return last; 
    } 
    catch (Exception ex) 
    { 
     string message = "A problem ocurred parsing the e-mail body searching for MailTos. \n" 
       + ex.Message; 
     throw new Exception(message, ex); 
    } 
} 

誰かに役立つことを願っています。

関連する問題