728x90
728x170
▶ 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
그리드형(광고전용)