JMail Pro接收邮件附件

这篇博客介绍了如何利用JMail Pro COM组件接收邮件附件。首先,你需要下载并注册w3 JMail v4.4 Professional,通过命令行工具regsvr32进行注册。之后在项目中添加对组件的引用,就可以在代码中调用NJMail.cs类的相关方法来实现邮件的接收和附件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

//Jmail接收邮件处理类NJMail.cs

namespace Common.NJMail
{
    
public class POP3
    
{
        
public delegate void MessagesEventHandler(MessagesState oMessagesState);
        
public delegate void AttachmentsEventHandler(AttachmentsState oAttachmentsState);

        
//异步事件
        public event MessagesEventHandler MessagesReceiveAsync;
        
public event AttachmentsEventHandler AttachmentsReceiveAsync;

        
//同步事件
        public event MessagesEventHandler MessageReceived;//一封邮件已收到本地
        
public event MessagesEventHandler MessageReceive;//一封邮件正到达
        
public event AttachmentsEventHandler AttachmentReceive;//一封邮件的附件正到达

        
//发生异常事件
        public event MessagesEventHandler MessageException;
        
public event AttachmentsEventHandler AttachmentException;

        
private string _UserName;
        
private string _Password;
        
private string _Server;
        
private int _Port = 110;

        
private static object _LockObject = new object();

        
/// <summary>
        
/// 每次接收邮件的数量
        
/// </summary>

        private int _mCount = 0;
        
public int MCount
        
{
            
set
            
{
                
this._mCount = value;
            }

            
get
            
{
                
return this._mCount;
            }

        }


        
/// <summary>
        
/// 接收邮件或附件重试次数
        
/// </summary>

        private int _aRetryCount = 0;
        
public int RetryCount
        
{
            
set
            
{
                
this._aRetryCount = value;
            }

            
get
            
{
                
return this._aRetryCount;
            }

        }


        
/// <summary>
        
/// 是否删除服务器上已下载邮件
        
/// </summary>

        private bool _bDelete = false;
        
public bool BDelete
        
{
            
set
            
{
                
this._bDelete = value;
            }

            
get
            
{
                
return this._bDelete;
            }

        }


        
构造函数

        
同步收邮件

        
收邮件
                    }
                        
else
                        
{
                            
throw e;
                        }

                    }

                }

            }

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

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

        }


        
#endregion


        
异步收邮件
    }



    
邮件

    
异常类型

    
附件
}

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

/// <summary>
        
/// 接收邮件
        
/// </summary>

        private void Pop3()
        
{
            
this.mCount = 0;
            
this.aCount = 0;

            
try
            
{
                x 
= new Common.NJMail.POP3(this.MailLoginName,this.MailLoginPwd,this.MailServer,this.MailPort);//配置邮件服务器
                x.MCount = this.MailAmount;
                x.RetryCount 
= this.MailRetry;
                x.BDelete 
= this.MailDelete;
                x.MessageReceive 
+= new Common.NJMail.POP3.MessagesEventHandler(x_MessageReceive);
                x.MessageReceived 
+= new Common.NJMail.POP3.MessagesEventHandler(x_MessageReceived);
                x.AttachmentReceive 
+= new Common.NJMail.POP3.AttachmentsEventHandler(x_AttachmentReceive);
                x.AttachmentException 
+= new Common.NJMail.POP3.AttachmentsEventHandler(x_AttachmentException);
                x.MessageException 
+= new Common.NJMail.POP3.MessagesEventHandler(x_MessageException);
                x.Execute();

                Debug.WriteLine(
"邮件接收报文成功! ");
                Debug.WriteLine(
"共接收邮件 "+this.mCount.ToString()+" 个,附件 "+this.aCount.ToString()+" 个! ");
            }

            
catch(Exception ex)
            
{
                Debug.WriteLine(
"邮件接收报文出错!出错原因:"+ex.Message+" ");
            }

        }


        
/// <summary>
        
/// 接收当前邮件
        
/// </summary>
        
/// <param name="oMessagesState">邮件</param>

        private void x_MessageReceive(Common.NJMail.MessagesState oMessagesState)
        
{
            Debug.WriteLine(oMessagesState.MessageID.ToString()
+",Subject:《"+oMessagesState.jMessage.Subject+"");
            Debug.WriteLine(
"Body: "+oMessagesState.jMessage.Body);
            Debug.WriteLine(
"Text: "+oMessagesState.jMessage.Text);
        }


        
/// <summary>
        
/// 接收当前邮件结束
        
/// </summary>
        
/// <param name="oMessagesState">邮件</param>

        private void x_MessageReceived(Common.NJMail.MessagesState oMessagesState)
        
{
            
if (oMessagesState.MessageID > 0)
            
{
                Debug.WriteLine(
"邮件 "+oMessagesState.MessageID.ToString()+" 接收完成!");
                
if(this.MailDelete)
                
{
                    oMessagesState.DeleteSingleMessage();
                    Debug.WriteLine(
"邮件 "+oMessagesState.MessageID.ToString()+" 删除!");
                }

                
this.mCount++;
            }

        }


        
/// <summary>
        
/// 接收当前邮件附件
        
/// </summary>
        
/// <param name="oAttachmentsState">附件集</param>

        private void x_AttachmentReceive(Common.NJMail.AttachmentsState oAttachmentsState)
        
{
//判断指定路径的附件是否存在
            if(!Directory.Exists(Application.StartupPath + "/"+ this.MailDownPath))
                Directory.CreateDirectory(Application.StartupPath 
+ "/"+ this.MailDownPath);
            oAttachmentsState.FileName 
=  Application.StartupPath + "/"+ this.MailDownPath + oAttachmentsState.jAttachment.Name;
            
if(!File.Exists(oAttachmentsState.FileName))
                oAttachmentsState.SaveToFile(oAttachmentsState.FileName);
            
if (oAttachmentsState.Exception != null)
            
{
                
throw oAttachmentsState.Exception ;
            }


            oAttachmentsState.CancelCurrent 
= true//不Save处理当前附件
            if (oAttachmentsState.AttachmentID > -1)
            
{
                Debug.WriteLine(
"附件 "+oAttachmentsState.AttachmentID.ToString()+":"+oAttachmentsState.FileName +"下载完成!");
            }

            
this.aCount++;
        }


        
/// <summary>
        
/// 接收附件异常处理
        
/// </summary>
        
/// <param name="oAttachmentsState">附件</param>

        private void x_AttachmentException(Common.NJMail.AttachmentsState oAttachmentsState)
        
{
            
if(File.Exists(Application.StartupPath + "/"+ this.MailDownPath + oAttachmentsState.jAttachment.Name))
                
this.DeleteFile(Application.StartupPath + "/"+ this.MailDownPath + oAttachmentsState.jAttachment.Name);
            oAttachmentsState.ExceptionAction 
= Common.NJMail.ExceptionActions.Retry;
        }


        
/// <summary>
        
/// 接收邮件异常处理
        
/// </summary>
        
/// <param name="oMessagesState">邮件</param>

        private void x_MessageException(Common.NJMail.MessagesState oMessagesState)
        
{
            
//oMessagesState.ExceptionAction = Common.NJMail.ExceptionActions.Retry; 
            Debug.WriteLine("接收邮件 "+oMessagesState.MessageID.ToString()+" 出错!错误原因:"+oMessagesState.Exception.Message);
            
this.log.WriteLogFile("接收邮件 "+oMessagesState.jMessage.Subject+" 时出错!错误原因:"+oMessagesState.Exception.Message+" ");
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值