■ IAnswerMessageTraverser<T> 인터페이스를 사용해 메시지 파트 계층을 탐색하는 방법을 보여준다.
▶ MessageNode.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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 } } |
▶ MessageTraverser.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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 } } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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 } } |