首先去搜索下载w3 JMail v4.4 Professional 这个COM 组件,然后注册这个组件,jmail 的注册方法,运行命令行: regsvr32 e:/jmail/jmail.dll,最后添加引用这个组件就可以使用了。
//Jmail接收邮件处理类NJMail.cs




























































































































































































































































}
else

...{
throw e;
}
}
}
}
catch (System.Exception e)

...{
throw e;
}
finally

...{
pop3.Disconnect();
pop3 = null;
}
}

#endregion


异步收邮件#region 异步收邮件
//[MTAThread]
private void MessageExecuteAsync(MessagesState oMessagesState)

...{
int J = oMessagesState.jMessage.Attachments.Count;
for (int j = 0; j < J; j++)

...{
AttachmentsState oass = new AttachmentsState(j,oMessagesState);
(new AttachmentsEventHandler(this.AttachmentExecuteAsync)).BeginInvoke(oass,new System.AsyncCallback(this.OnAttachemnetCallBack),oass);
}
}

//[MTAThread]
private void AttachmentExecuteAsync(AttachmentsState oAttachmentsState)

...{
//
}

//[MTAThread]
private void OnMessageCallBack(System.IAsyncResult iar)

...{
MessagesState omss = (MessagesState) iar.AsyncState;
if (this.MessagesReceiveAsync != null)

...{
if (omss.jMessage.Attachments.Count == 0)

...{
this.MessagesReceiveAsync(omss);
}
}
}

//[MTAThread]
private void OnAttachemnetCallBack(System.IAsyncResult iar)

...{
AttachmentsState oass = (AttachmentsState) iar.AsyncState;
if (this.AttachmentsReceiveAsync != null)

...{
this.AttachmentsReceiveAsync(oass);
}
if (!oass.CancelCurrent)

...{
try

...{
oass.SaveToFile(oass.FileName);
}
catch (System.Exception e)

...{
oass.Exception = e;
if (AttachmentException != null)

...{
AttachmentException(oass);
if (oass.ExceptionAction == NJMail.ExceptionActions.CancelAll)

...{

}
else
if (oass.ExceptionAction == NJMail.ExceptionActions.Retry)

...{
this.OnAttachemnetCallBack((System.IAsyncResult) oass);
}
else
if (oass.ExceptionAction == NJMail.ExceptionActions.Ignore)

...{

}
else
if (oass.ExceptionAction == NJMail.ExceptionActions.Throw)

...{
throw e;
}
}
}
}
if (this.MessagesReceiveAsync != null)

...{
if (oass.AttachmentsCount == 0)

...{
this.MessagesReceiveAsync(oass.MessagesState);
}
}
}
#endregion
}



邮件#region 邮件
public class MessagesState //Messages 状态

...{
private static object _LockObject = new object();
private int _MessageID;
private jmail.MessageClass _jMessage;
private jmail.MessagesClass _jMessages;
private jmail.POP3Class _jPOP3;
private string _FilePath;

private bool _CancelCurrent;
private System.Exception _Exception;
private ExceptionActions _ExceptionAction;

public ExceptionActions ExceptionAction

...{
get

...{
return _ExceptionAction;
}
set

...{
this._ExceptionAction = value;
}
}

public System.Exception Exception

...{
get

...{
return _Exception;
}
set

...{
this._Exception = value;
}
}

public string FilePath

...{
get

...{
return this._FilePath;
}
}

internal void SetFilePath(string FilePath)

...{
this._FilePath = FilePath;
}

public bool CancelCurrent

...{
get

...{
return this._CancelCurrent;
}
set

...{
this._CancelCurrent = value;
}
}

public int MessagesCount //尚未处理的邮件数

...{
get

...{
//lock(MessagesState._LockObject)

...{
return this._jMessages.Count - this._MessageID - 1;
}
}
}

public jmail.MessagesClass jMessages

...{
get

...{
return this._jMessages;
}
}

public jmail.MessageClass jMessage

...{
get

...{
return this._jMessage;
}
}

public int MessageID

...{
get

...{
return this._MessageID;
}
}

internal MessagesState(int MessageID,jmail.MessageClass jMessage,jmail.MessagesClass jMessages,jmail.POP3Class jPOP3)

...{
this._MessageID = MessageID;
this._jMessage = jMessage;
this._jMessages = jMessages;
this._jPOP3 = jPOP3;
}

public void DeleteSingleMessage()

...{
lock(MessagesState._LockObject)

...{
this.DeleteSingleMessage(this._MessageID);
}
}

public void DeleteSingleMessage(int MessageID)

...{
lock(MessagesState._LockObject)

...{
this._jPOP3.DeleteSingleMessage(MessageID);
}
}

public void DeleteMessages()

...{
lock(MessagesState._LockObject)

...{
this._jPOP3.DeleteMessages();
}
}
}

#endregion


异常类型#region 异常类型
public enum ExceptionActions

...{
CancelAll,Ignore,Retry,Throw
}
#endregion


附件#region 附件
public class AttachmentsState //Attachments 状态

...{
private MessagesState _MessagesState;
private int _AttachmentID;
private string _FileName;
private static object _LockObject = new object();
private jmail.AttachmentClass _jAttachment;
private bool _CancelCurrent;
private System.Exception _Exception;
private ExceptionActions _ExceptionAction;

public ExceptionActions ExceptionAction

...{
get

...{
return _ExceptionAction;
}
set

...{
this._ExceptionAction = value;
}
}

public System.Exception Exception

...{
get

...{
return _Exception;
}
set

...{
this._Exception = value;
}
}

public bool CancelCurrent

...{
get

...{
return this._CancelCurrent;
}
set

...{
this._CancelCurrent = value;
}
}

public jmail.AttachmentClass jAttachment

...{
get

...{
return this._jAttachment;
}
}

public int AttachmentsCount //尚未处理的邮件附件数

...{
get

...{
//lock(AttachmentsState._LockObject)

...{
return this._MessagesState.jMessage.Attachments.Count - this._AttachmentID - 1;
}
}
}

public string FileName

...{
get

...{
return this._FileName;
}
set

...{
this._FileName = value;
}
}

public MessagesState MessagesState

...{
get

...{
return this._MessagesState;
}
}

public int AttachmentID

...{
get

...{
return this._AttachmentID;
}
}

public void SaveToFile(string FileName)

...{
if (!this.CancelCurrent)

...{
this._jAttachment.SaveToFile(FileName);
}
}

internal AttachmentsState(int AttachmentID,MessagesState oMessagesState)

...{
this._MessagesState = oMessagesState;
this._AttachmentID = AttachmentID;
this._jAttachment = (jmail.AttachmentClass) oMessagesState.jMessage.Attachments[AttachmentID];
this._FileName = System.String.Format("[{0}].{1}.[{2}].{3}",oMessagesState.MessageID,oMessagesState.jMessage.Subject,AttachmentID,this._jAttachment.Name);
}
}
#endregion
}























































































































































































































































































































































































































































//调用方法,放在要调用的类里,其中this开头的变量需要预先声明和赋值


























































































































