2011-02-18 17 views
5

Bir ASP.Net uygulamasında skoru kontrol etmenin bir yolu var mı? Net için bir sınıf veya benzer bir şey? Orada diğer Spam Filtreleri hakkında. --Edited C# içindeki e-posta iletilerinin spam puanını kontrol etmenin bir yolunu arıyorum.spamassassin kontrol puanı C# kodu

+0

Ne puanı kontrol et? Ne yapmaya çalıştığınız hakkında daha detaylı olabilirsiniz. http://tinyurl.com/so-hints –

+0

Ridvan, e-postaları sunucudan alan ve spam olup olmadığını ve neyin iyi olduğunu kontrol eden bir sistemi uygulamak ister misiniz? eğer öyleyse, iyi ve kötü mesajlarla ne yapmak istersiniz? –

+0

Kimden, Konu ve Gövde sağlandığında bir e-posta iletisinin spam puanını kontrol edecek bir araç uygulamaya çalışıyorum. E-postayı aldığımda değil, bir e-posta gönderilmeden önce veya bir e-postanın spam puanını gösteren bir web aracı. Bu http://www.codeproject.com/KB/recipes/BayesianCS.aspx'i görmüştüm ama bana göre gerçekten de Spam Assasin – Ridvan

cevap

1

ben olduğumu aradığınız ama Kod Projesi'nde bir SpamAssassin sunucusuyla iletişim kolaylaştıran bir C# sarıcı olduğunu buysa tam olarak emin:

Hope o yardım eder!

4

İşte benim süper basitleştirilmiş olan "sadece puan kontrol edin" kodu çalışan Spam Assassin e-posta kontrolüne bağlanmak için C# http://elasticemail.com için yazdım. Sadece bir sunucuda çalıştırmak ve erişim izinlerini ayarlamak için SA'yı kurun.

O zaman aramak için bu kodu kullanabilirsiniz:

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; 
    } 

} 

Kullanımı oldukça kolaydır:

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

Size isabet spam kontrol kurallarının listesi ve elde edilen skor etkisini dönecektir.