In this article, you will learn how to create a spam filter on your mail application. You will also see how to filter your mail based on whether the mail tells about a particular topic or not.
- SpamFilterSample.zip
- SpamFilterSample
- HigLabo.Mail.SampleApplication
- HigLabo.Mail
- Async
- bin
- Debug
- Release
- HigLabo.Mail.dll
- HigLabo.Net.dll
- Newtonsoft.Json.dll
- Common
- HigLabo.Mail.csproj
- HigLabo.Mail.csproj.user
- HigLabo.Mail.csproj.vspscc
- Imap
- obj
- Pop3
- Properties
- Smtp
- HigLabo.Net
- bin
- Debug
- de
- es
- fr
- it
- ja
- ko
- ru
- zh-Hans
- zh-Hant
- Release
- de
- System.Xml.Linq.resources.dll
- es
- System.Xml.Linq.resources.dll
- fr
- System.Xml.Linq.resources.dll
- HigLabo.Net.dll
- HigLabo.Net.Silverlight.dll
- HigLabo.Net.WindowsPhone7.dll
- it
- System.Xml.Linq.resources.dll
- ja
- System.Xml.Linq.resources.dll
- ko
- System.Xml.Linq.resources.dll
- Newtonsoft.Json.dll
- Newtonsoft.Json.Silverlight.dll
- Newtonsoft.Json.WindowsPhone7.dll
- ru
- System.Xml.Linq.resources.dll
- System.Xml.Linq.dll
- zh-Hans
- System.Xml.Linq.resources.dll
- zh-Hant
- System.Xml.Linq.resources.dll
- Core
- Extensions
- HigLabo.Net.csproj
- HigLabo.Net.csproj.user
- HigLabo.Net.csproj.vspscc
- HigLabo.Net.Silverlight.csproj
- HigLabo.Net.Silverlight.csproj.user
- HigLabo.Net.Silverlight.csproj.vspscc
- HigLabo.Net.WindowsPhone7.csproj
- HigLabo.Net.WindowsPhone7.csproj.user
- HigLabo.Net.WindowsPhone7.csproj.vspscc
- Http
- OAuth
- obj
- Properties
- Socket
- Reference
- BayesianFilter.dll
- bin
- Debug
- Reference.dll
- Release
- HtmlAgilityPack.dll
- obj
- Debug
- TempPE
- Properties
- Reference.csproj
- Reference.csproj.user
- SpamFilterSample
- SpamFilterSample-noexe.zip
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace HigLabo.Net
{
/// <summary>
///
/// </summary>
#if !SILVERLIGHT
[Serializable]
#endif
public class AsyncHttpContext
{
/// <summary>
///
/// </summary>
public event EventHandler<HttpRequestUploadingEventArgs> Uploading;
/// <summary>
///
/// </summary>
public event EventHandler<AsyncHttpCallErrorEventArgs> Error;
private HttpRequestCommand _Command = null;
private Action<HttpWebResponse> _Callback = null;
/// <summary>
///
/// </summary>
public Int32? RequestBufferSize { get; set; }
/// <summary>
///
/// </summary>
public Action<HttpWebResponse> Callback
{
get { return _Callback; }
set { _Callback = value; }
}
/// <summary>
///
/// </summary>
/// <param name="command"></param>
/// <param name="callback"></param>
public AsyncHttpContext(HttpRequestCommand command, Action<HttpWebResponse> callback)
{
_Command = command;
_Callback = callback;
}
/// <summary>
///
/// </summary>
/// <param name="command"></param>
/// <param name="requestBufferSize"></param>
/// <param name="callback"></param>
public AsyncHttpContext(HttpRequestCommand command, Int32 requestBufferSize, Action<HttpWebResponse> callback)
{
_Command = command;
this.RequestBufferSize = requestBufferSize;
_Callback = callback;
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
public void BeginRequest(HttpWebRequest request)
{
var cx = this;
var req = request;
Int64 length = 0;
if (this._Command.BodyStream == null || this._Command.IsSendBodyStream == false)
{
req.BeginGetResponse(this.GetResponse, request);
}
else
{
var stream = _Command.BodyStream;
if (stream != null)
{
try
{
length = stream.Length;
}
catch (NotSupportedException)
{ throw new NotSupportedException("This stream is not supported to read length property."); }
}
if (length == 0)
{
req.BeginGetResponse(this.GetResponse, req);
}
else
{
if (this.RequestBufferSize <= 0) { throw new InvalidOperationException("RequestBufferSize must be larger than zero."); }
req.BeginGetRequestStream(this.WriteRequestStream, req);
}
}
}
private void WriteRequestStream(IAsyncResult result)
{
var cx = this;
Stream stm = null;
StreamWriteContext scx = null;
try
{
var req = result.AsyncState as HttpWebRequest;
stm = req.EndGetRequestStream(result);
if (this.RequestBufferSize.HasValue == true)
{
scx = new StreamWriteContext(stm, this.RequestBufferSize.Value);
}
else
{
scx = new StreamWriteContext(stm);
}
scx.Uploading += (o, e) => this.OnUploading(e);
scx.Write(_Command.BodyStream);
stm.Close();
stm = null;
req.BeginGetResponse(this.GetResponse, req);
}
catch (Exception ex)
{
this.OnError(ex);
}
finally
{
if (stm != null)
{
stm.Close();
}
}
}
private void GetResponse(IAsyncResult result)
{
var cx = this;
try
{
var req = result.AsyncState as HttpWebRequest;
var res = req.EndGetResponse(result) as HttpWebResponse;
this.OnCallback(res);
}
catch (Exception ex)
{
this.OnError(ex);
}
}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected void OnUploading(HttpRequestUploadingEventArgs e)
{
var eh = this.Uploading;
if (eh != null)
{
eh(this, e);
}
}
/// <summary>
///
/// </summary>
/// <param name="response"></param>
protected void OnCallback(HttpWebResponse response)
{
var eh = this.Callback;
if (eh != null)
{
eh(response);
}
}
/// <summary>
///
/// </summary>
/// <param name="exception"></param>
protected void OnError(Exception exception)
{
var eh = this.Error;
if (eh != null)
{
eh(this, new AsyncHttpCallErrorEventArgs(this, exception));
}
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.