2011-02-18 3 views
5

ASP.Netアプリケーションでスコアを確認する方法はありますか? .NETのためのクラスまたは類似のもの?他のスパムフィルタはどうですか? - 編集済み C#で電子メールメッセージのスパムスコアを確認する方法を探しています。spamassassinチェックスコアC#コード

+0

どのようなスコアを確認しますか?あなたは何をしようとしているのかについてもっと詳しく説明しているかもしれません。 http://tinyurl.com/so-hints –

+0

Ridvan、サーバーから電子メールを取得し、迷惑メールと何が良いかを確認するシステムを実装したいですか?もしそうなら、あなたは良いメッセージと悪いメッセージで何をしたいですか? –

+0

From、Subject、Bodyが指定されている場合、電子メールメッセージのスパムスコアをチェックするツールを実装しようとしています。電子メールを受信したときではなく、電子メールを送信する前に、電子メールのスパムスコアを表示するためのWebツールを使用します。私はこのhttp://www.codeproject.com/KB/recipes/BayesianCS.aspxを見てきましたが、私には本当に迷惑メールではありません。 – Ridvan

答えて

1

私はそれはあなたが探しているものだが、コードプロジェクトにSpamAssassinのサーバーとの通信を簡素化するC#のラッパーがある場合は、正確にわからない:

・ホープ助けて!

4

私はhttp://elasticemail.comのために書いたC#の実行中のスパム暗殺者の電子メールチェックに接続するための "スコアをチェックする"というコードを使用しています。 SAをセットアップしてサーバー上で実行し、アクセス許可を設定するだけです。

は、その後、あなたはそれを呼び出すために、このコードを使用することができます:

public class SimpleSpamAssassin 
{ 
    public class RuleResult 
    { 
     public double Score = 0; 
     public string Rule = ""; 
     public string Description = ""; 

     public RuleResult() { } 
     public RuleResult(string line) 
     { 
      Score = double.Parse(line.Substring(0, line.IndexOf(" ")).Trim()); 
      line = line.Substring(line.IndexOf(" ") + 1); 
      Rule = line.Substring(0, 23).Trim(); 
      Description = line.Substring(23).Trim(); 
     } 
    } 
    public static List<RuleResult> GetReport(string serverIP, string message) 
    { 
     string command = "REPORT"; 

     StringBuilder sb = new StringBuilder(); 
     sb.AppendFormat("{0} SPAMC/1.2\r\n", command); 
     sb.AppendFormat("Content-Length: {0}\r\n\r\n", message.Length); 
     sb.AppendFormat(message); 

     byte[] messageBuffer = Encoding.ASCII.GetBytes(sb.ToString()); 

     using (Socket spamAssassinSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) 
     { 
      spamAssassinSocket.Connect(serverIP, 783); 
      spamAssassinSocket.Send(messageBuffer); 
      spamAssassinSocket.Shutdown(SocketShutdown.Send); 

      int received; 
      string receivedMessage = string.Empty; 
      do 
      { 
       byte[] receiveBuffer = new byte[1024]; 
       received = spamAssassinSocket.Receive(receiveBuffer); 
       receivedMessage += Encoding.ASCII.GetString(receiveBuffer, 0, received); 
      } 
      while (received > 0); 

      spamAssassinSocket.Shutdown(SocketShutdown.Both); 

      return ParseResponse(receivedMessage); 
     } 

    } 

    private static List<RuleResult> ParseResponse(string receivedMessage) 
    { 
     //merge line endings 
     receivedMessage = receivedMessage.Replace("\r\n", "\n"); 
     receivedMessage = receivedMessage.Replace("\r", "\n"); 
     string[] lines = receivedMessage.Split('\n'); 

     List<RuleResult> results = new List<RuleResult>(); 
     bool inReport = false; 
     foreach (string line in lines) 
     { 
      if (inReport) 
      { 
       try 
       { 
        results.Add(new RuleResult(line.Trim())); 
       } 
       catch 
       { 
        //past the end of the report 
       } 
      } 

      if (line.StartsWith("---")) 
       inReport = true; 
     } 

     return results; 
    } 

} 

使い方は非常に簡単です:

List<RuleResult> spamCheckResult = SimpleSpamAssassin.GetReport(IP OF SA Server, FULL Email including headers); 

は、それはあなたがヒットスパムチェックルールのリストと結果のスコアへの影響を返します。