Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spamasassin检查分数C#代码_C#_Asp.net_Spam Prevention_Spamassassin - Fatal编程技术网

Spamasassin检查分数C#代码

Spamasassin检查分数C#代码,c#,asp.net,spam-prevention,spamassassin,C#,Asp.net,Spam Prevention,Spamassassin,有没有办法检查ASP.Net应用程序中的分数?Net的类或类似的东西?其他垃圾邮件过滤器怎么样。 --编辑 我正在寻找一种方法来检查C#中电子邮件的垃圾邮件分数 我不确定这是否是您要搜索的内容,但有一个C#包装器可以简化与代码项目上的SpamAssassin服务器的通信: 希望有帮助 这是我超级简化的“只需检查分数”代码,用于连接到C#正在运行的垃圾邮件刺客电子邮件检查,这是我为其编写的。只需将SA设置为在服务器上运行,并设置访问权限 然后您可以使用此代码调用它: public class

有没有办法检查ASP.Net应用程序中的分数?Net的类或类似的东西?其他垃圾邮件过滤器怎么样。 --编辑
我正在寻找一种方法来检查C#中电子邮件的垃圾邮件分数

我不确定这是否是您要搜索的内容,但有一个C#包装器可以简化与代码项目上的SpamAssassin服务器的通信:


希望有帮助

这是我超级简化的“只需检查分数”代码,用于连接到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;
    }

}
公共类SimpleSpamAssassin
{
公共类规则结果
{
公众双倍得分=0;
公共字符串规则=”;
公共字符串Description=“”;
公共规则结果(){}
公共规则结果(字符串行)
{
Score=double.Parse(line.Substring(0,line.IndexOf(“”).Trim());
line=line.Substring(line.IndexOf(“”+1);
Rule=line.Substring(0,23).Trim();
Description=行.子字符串(23).Trim();
}
}
公共静态列表GetReport(字符串服务器IP,字符串消息)
{
string命令=“报告”;
StringBuilder sb=新的StringBuilder();
sb.AppendFormat(“{0}SPAMC/1.2\r\n”,命令);
sb.AppendFormat(“内容长度:{0}\r\n\r\n”,message.Length);
b.附加格式(信息);
byte[]messageBuffer=Encoding.ASCII.GetBytes(sb.ToString());
使用(Socket spamAssassinSocket=新套接字(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp))
{
连接(服务器IP,783);
spamAssassinSocket.Send(messageBuffer);
spamAssassinSocket.Shutdown(SocketShutdown.Send);
收到整数;
string receivedMessage=string.Empty;
做
{
字节[]接收缓冲区=新字节[1024];
received=spamAssassinSocket.received(接收缓冲区);
receivedMessage+=Encoding.ASCII.GetString(receiveBuffer,0,received);
}
while(接收>0);
spamAssassinSocket.Shutdown(SocketShutdown.Both);
返回ParseResponse(receivedMessage);
}
}
私有静态列表解析响应(字符串receivedMessage)
{
//合并行尾
receivedMessage=receivedMessage.Replace(“\r\n”,“\n”);
receivedMessage=receivedMessage.Replace(“\r”,“\n”);
string[]line=receivedMessage.Split('\n');
列表结果=新列表();
bool-inReport=false;
foreach(行中的字符串行)
{
如果(在报告中)
{
尝试
{
添加(新规则结果(line.Trim());
}
抓住
{
//报告结束后
}
}
if(第行开始,以“--”号填列)
inReport=true;
}
返回结果;
}
}
使用非常简单:

List<RuleResult> spamCheckResult = SimpleSpamAssassin.GetReport(IP OF SA Server, FULL Email including headers);
List spamCheckResult=SimpleSpamAssassin.GetReport(SA服务器的IP,包含标题的完整电子邮件);

它将返回您点击的垃圾邮件检查规则列表以及由此产生的分数影响。

检查分数是多少?您可能会更详细地了解您正在尝试做什么。Ridvan,你想安装一个系统,从服务器获取电子邮件,并检查哪些是垃圾邮件,哪些是好的?如果是这样,你想如何处理好消息和坏消息?我正在尝试实现一个工具,如果提供了发件人、主题和正文,它将检查电子邮件的垃圾邮件分数。不是在我收到电子邮件时,而是在发送电子邮件之前,或者是在一个网络工具显示电子邮件的垃圾邮件分数之前。我已经看到了这一点,但对我来说,这并不是真正的垃圾邮件,这里的一个做为一个快速的桌面应用程序。如果您想使用programattic,我认为您可能必须将spamassassin作为服务运行,并使用其服务接口查询分数。现在,您可以使用ToGetting error on SpamAssassissionSocket.Receive(receiveBuffer)“System.Net.Sockets.SocketException:'现有连接被远程主机强制关闭'