첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
0.01MB

▶ MessageNode.cs

using System.Collections.Generic;

using OpenPop.Mime;

namespace TestProject
{
    /// <summary>
    /// 메시지 노드
    /// </summary>
    public class MessageNode
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 노드명 - NodeName

        /// <summary>
        /// 노드명
        /// </summary>
        public string NodeName { get; set; }

        #endregion
        #region 메시지 파트 - MessagePart

        /// <summary>
        /// 메시지 파트
        /// </summary>
        public MessagePart MessagePart { get; set; }

        #endregion
        #region 자식 노드 리스트 - ChildNodeList

        /// <summary>
        /// 자식 노드 리스트
        /// </summary>
        public List<MessageNode> ChildNodeList { get; set; } = new List<MessageNode>();

        #endregion
    }
}

 

728x90

 

▶ MessageTraverser.cs

using System;

using OpenPop.Mime;
using OpenPop.Mime.Traverse;

namespace TestProject
{
    /// <summary>
    /// 메시지 횡단자
    /// </summary>
    public class MessageTraverser : IAnswerMessageTraverser<MessageNode>
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 메시지 파트 방문하기 - VisitMessagePart(messagePart)

        /// <summary>
        /// 메시지 파트 방문하기
        /// </summary>
        /// <param name="messagePart">메시지 파트</param>
        /// <returns>메시지 노드</returns>
        public MessageNode VisitMessagePart(MessagePart messagePart)
        {
            if(messagePart == null)
            {
                throw new ArgumentNullException("messagePart");
            }

            MessageNode node = new MessageNode();

            node.NodeName    = messagePart.ContentType.MediaType;
            node.MessagePart = messagePart;

            if(messagePart.IsMultiPart)
            {
                for(int i = 0; i< messagePart.MessageParts.Count; i++)
                {
                    MessageNode childNode = VisitMessagePart(messagePart.MessageParts[i]);

                    node.ChildNodeList.Add(childNode);
                }
            }

            return node;
        }

        #endregion
        #region 메시지 방문하기 - VisitMessage(message)

        /// <summary>
        /// 메시지 방문하기
        /// </summary>
        /// <param name="message">메시지</param>
        /// <returns>메시지 노드</returns>
        public MessageNode VisitMessage(Message message)
        {
            if(message == null)
            {
                throw new ArgumentNullException("message");
            }

            MessageNode childNode = VisitMessagePart(message.MessagePart);

            MessageNode node = new MessageNode();
            
            node.NodeName    = message.Headers.Subject;
            node.MessagePart = message.MessagePart;

            node.ChildNodeList.Add(childNode);
            
            return node;
        }

        #endregion
    }
}

 

300x250

 

▶ Program.cs

using System;

using OpenPop.Mime;
using OpenPop.Pop3;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 메시지 노드 쓰기 - WriteMessageNode(messageNode, nodeLevel)

        /// <summary>
        /// 메시지 노드 쓰기
        /// </summary>
        /// <param name="messageNode">메시지 노드</param>
        /// <param name="nodeLevel">노드 레벨</param>
        private static void WriteMessageNode(MessageNode messageNode, int nodeLevel = 0)
        {
            Console.WriteLine($"{" ".PadRight(nodeLevel * 4)}{messageNode.NodeName}");

            foreach(MessageNode childNode in messageNode.ChildNodeList)
            {
                WriteMessageNode(childNode, nodeLevel + 1);
            }
        }

        #endregion
        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            string hostName = "pop.naver.com";
            int    port     = 995;
            bool   useSSL   = true;
            string userName = "tester";
            string password = "1234";

            using(Pop3Client client = new Pop3Client())
            {
                client.Connect(hostName, port, useSSL);

                client.Authenticate(userName, password);

                int messageCount = client.GetMessageCount();

                for(int i = 1; i <= messageCount; i++)
                {
                    Message message = client.GetMessage(i);

                    MessageTraverser traverser = new MessageTraverser();

                    MessageNode node = traverser.VisitMessage(message);

                    WriteMessageNode(node);

                    Console.WriteLine();
                }
            }
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요