OpenPop读取邮件、获取附件、删除邮件等

本文介绍了如何借助MailHelper类利用OpenPop库来实现邮件的读取、附件的获取以及邮件的删除等操作。

MailHelper ,使用OpenPop读取邮件、获取附件、删除邮件等


using OpenPop.Mime;
using OpenPop.Mime.Header;
using OpenPop.Pop3;
using OpenPop.Pop3.Exceptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyHelpers
{
    public class MessageHeaderWrap
    {
        public MessageHeader Message;

        public int MessageId;
    }

    public class MailHelper
    {
        #region 私有变量
        private string account;
        private string password;
        private string popServer;
        private int popPort;
        private bool IsUseSSL;
        #endregion

        #region 构造函数

        public MailHelper(string _account, string _password, string _popServer, int _popPort, bool _IsUseSSL)
        {
            account = _account;
            password = _password;
            popServer = _popServer;
            popPort = _popPort;
            IsUseSSL = _IsUseSSL;
        }
        #endregion

        #region 方法
        public bool ValidateAccount(ref string error)
        {
            Pop3Client client = new Pop3Client();
            string message = "account:" + account + " password" + password + " popServer:" + popServer + " popPort:" + popPort + " IsUseSSL:" + IsUseSSL;
            try
            {
                client.Connect(popServer, popPort, IsUseSSL);
                client.Authenticate(account, password);
            }
            catch (InvalidLoginException ex)
            {
                error = "邮箱登录失败";
                return false;
            }
            catch (InvalidUseException ex)
            {
                error = "邮箱登录失败";
                return false;
            }
            catch (PopServerNotFoundException ex)
            {
                error = "服务器没有找到";
                return false;
            }
            catch (PopServerException ex)
            {
                error = "请在邮箱开通POP3/SMTP";
                return false;
            }
            catch (Exception ex)
            {
                error = "连接出现异常";
                return false;
            }
            client.Disconnect();
            return true;
        }
        
        public List GetMessageList()
        {
            List headers = new List();
            using (Pop3Client client = new Pop3Client())
            {
                client.Connect(popServer, popPort, IsUseSSL);
                client.Authenticate(account, password);
                int messageCount = client.GetMessageCount();

                for (int i = messageCount; i > 0; i--)
                {
                    try
                    {
                        MessageHeaderWrap h = new MessageHeaderWrap() { Message = client.GetMessageHeaders(i), MessageId = i };
                        headers.Add(h);
                    }
                    catch
                    { }
                }
            }
            return headers;
        }

        /// 
        /// 获取邮件列表ids
        /// 
        /// 
        public List GetNewMailIds()
        {
            List mailIds = new List();
            using (Pop3Client client = new Pop3Client())
            {
                try
                {
                    client.Connect(popServer, popPort, IsUseSSL);
                    client.Authenticate(account, password);
                    int messageCount = client.GetMessageCount();

                    for (int i = messageCount; i > 0; i--)
                    {
                        mailIds.Add(i.ToString());
                    }

                }
                catch (Exception ex)
                {
                    throw new Exception("获取邮件ID列表出错,异常信息:" + ex.Message);
                }
            }
            return mailIds;
        }

        public List GetMessageList(int currentPageIndex, int pageSize, ref int messageCount)
        {
            List headers = new List();
            using (Pop3Client client = new Pop3Client())
            {
                client.Connect(popServer, popPort, IsUseSSL);
                client.Authenticate(account, password);
                messageCount = client.GetMessageCount();
                var begin = messageCount - currentPageIndex * pageSize;
                var end = messageCount - ((currentPageIndex + 1) * pageSize);
                while (begin > end
                    && begin > 0)
                {
                    try
                    {
                        MessageHeaderWrap h = new MessageHeaderWrap() { Message = client.GetMessageHeaders(begin), MessageId = begin };
                        headers.Add(h);
                    }
                    catch
                    {
                        end--;
                    }
                    begin--;
                }
            }
            return headers;
        }

        public MessagePart GetAttachment(Message m, string filename)
        {
            List list2 = m.FindAllAttachments();
            foreach (MessagePart attach in list2)
            {
                if (attach.FileName.ToLower() == filename.ToLower())
                {
                    return attach;
                }
            }
            return null;
        }

        public MessagePart GetAttachment(string messageID, string filename)
        {
            using (Pop3Client client = new Pop3Client())
            {
                client.Connect(popServer, popPort, IsUseSSL);
                client.Authenticate(account, password);
                Message m = client.GetMessage(int.Parse(messageID));

                List list2 = m.FindAllAttachments();
                foreach (MessagePart attach in list2)
                {
                    if (attach.FileName.ToLower() == filename.ToLower())
                    {
                        return attach;
                    }
                }
            }
            return null;
        }

        public List GetAttachments(string messageID)
        {
            using (Pop3Client client = new Pop3Client())
            {
                client.Connect(popServer, popPort, IsUseSSL);
                client.Authenticate(account, password);
                Message m = client.GetMessage(int.Parse(messageID));
                return m.FindAllAttachments();
            }
        }

        public Message GetMessage(int index)
        {
            List headers = new List();
            Message m = null;
            try
            {
                using (Pop3Client client = new Pop3Client())
                {
                    client.Connect(popServer, popPort, IsUseSSL);
                    client.Authenticate(account, password);
                    m = client.GetMessage(index);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("获取邮件出现异常信息:"+ex.Message+" messageID为:" + index);
            }
            return m;
        }
        /// 
        /// 根据id 删除邮件
        /// 
        /// 邮件id
        public void DeleteMessage(string messageId)
        {
            try
            {
                using (Pop3Client client = new Pop3Client())
                {
                    client.Connect(popServer, popPort, IsUseSSL);
                    client.Authenticate(account, password);
                    client.DeleteMessage(int.Parse(messageId));
                }
            }
            catch (Exception ex)
            {
                throw new Exception("删除邮件出现异常信息:"+ex.Message+" messageID为:" + messageId);
            }
        }
        #endregion
    }
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值