JMail Pro接收邮件附件

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

首先去搜索下载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+" ");
        }


内容概要:本文系统阐述了面向综合能源系统的算力-电力-热力联合优化调度策略,并提供基于Matlab的完整代码实现。研究围绕多能源耦合系统中的协同优化问题展开,深度融合计算资源调度与能源系统运行,构建包含算力任务分配、电力供需平衡与热力网络约束的联合优化模型。重点解决了高比例可再生能源接入下的不确定性挑战,采用分布鲁棒优化、粒子群优化(PSO)等先进算法提升调度方案的经济性、可靠性与灵活性。同时引入隐私保护机制与联邦学习架构,保障多主体间数据安全协同。配套资源涵盖详细的仿真代码、案例数据及算法工具包(如YALMIP),支持模型快速复现与扩展研究,适用于复杂能源系统建模与智能算法验证。; 适合人群:具备电力系统、热力工程、自动化或运筹优化等相关背景,熟悉Matlab/Simulink仿真环境,从事能源系统规划与运行研究的研究生、博士生及科研人员;特别适合开展综合能源系统优化、智能调度算法开发、SCI论文复现与科研创新的研究者。; 使用场景及目标:①构建算力-电力-热力多能流协同调度模型并进行仿真分析;②研究含风电等不确定性源的鲁棒优化调度方法;③应用PSO、分布鲁棒优化等智能算法解决实际能源调度问题;④作为高水平期刊论文复现、算法对比与科研成果转化的技术支撑; 阅读建议:建议结合公众号“荔枝科研社”发布的网盘资源,按模块顺序学习模型构建与算法实现细节,重点关注目标函数设计、约束条件建模及求解器调用逻辑,通过调试代码与修改参数深化理解,并开展二次开发以拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值