본문 바로가기
개발/ASP.NET

메일 수신과 삭제 with OpenPoP.NET

by ispie 2019. 1. 21.

Open Pop.NET

http://hpop.sourceforge.net/

 

OpenPop.NET은 C#으로 이메일을 제어 가능한 라이브러리입니다.

 

아래는 OpenPop.NET을 이용해서 메일의 수신과 삭제를 실행하는 부분을 정리한 내용입니다.

 

 

 

메일 수신과 삭제 기능의 호출 부분

using (Pop3Client pop3Client = GetPop3Client())
{
    var pop3 = new Pop3Mail();
    List<mailinfo> receivedMailList = pop3.ReceiveMails(pop3Client);
    pop3.DeleteMessageByMessageId(client, 1); // MessageId
}

 

Pop3Client생성

public static Pop3Client GetPop3Client()
{
    string host = ConfigurationManager.AppSettings["pop.host"];
    int port = Convert.ToInt32(ConfigurationManager.AppSettings["pop.port"]);
    string username = ConfigurationManager.AppSettings["pop.username"];
    string password = ConfigurationManager.AppSettings["pop.password"];

    var client = new Pop3Client();
    client.Connect(host, port, true);
    client.Authenticate(username, password);

    return client;
}

 

Web.config or App.config

<appsettings>
  <add key="pop.host" value="host"/>
  <add key="pop.port" value="port"/>
  <add key="pop.username" value="username"/>
  <add key="pop.password" value="password"/>
</appsettings>

 

메일 수신 & 삭제용 메소드

using OpenPop.Mime;
using OpenPop.Pop3;
using System;
using System.Collections.Generic;
using System.Configuration;
using Message = OpenPop.Mime.Message;

public class Pop3Mail {

public List<mailinfo> ReceiveMails(Pop3Client client)
{   
    var receivedMailList = new List<mailinfo>();
    int messageCount = client.GetMessageCount();
    string subject = string.Empty;
    string body = string.Empty;

    for (int i = messageCount; i >= 1; i -= 1)
    {
        Message message = client.GetMessage(i);
        MessagePart plainTextPart = message.FindFirstPlainTextVersion();
        subject = message.Headers.Subject;
        body = plainTextPart.GetBodyAsText();

        var mailInfo = new MailInfo();
        mailInfo.CurrentSubject = subject;
        mailInfo.CurrentBody = body;
        mailInfo.CurrentMessageID = message.Headers.MessageId;
        receivedMailList.Add(mailInfo);
    }
    return receivedMailList;
}

public void DeleteMessageByMessageId(Pop3Client client, string messageId)
{
    try
    {
        int messageCount = client.GetMessageCount();

        for (int messageItem = messageCount; messageItem > 0; messageItem--)
        {
            if (client.GetMessageHeaders(messageItem).MessageId == messageId)
            {
                client.DeleteMessage(messageItem);
            }
        }
    }
    catch (Exception e)
    {
        // 메일이 이미 삭제된 경우엔 에러 처리에서 제외한다
        if (e.Message.IndexOf("ERR Message is deleted") == -1)
        {
            throw new Exception("메일 삭제 도중에 문제가 발생했습니다.");
        }
    }
}
}

 

메일 수신 내용 격납용 클래스

public class MailInfo
{
    public string CurrentMessageID { get; set; }
    public string CurrentSubject { get; set; }
    public string CurrentBody { get; set; }
    public string PreviousMessageID { get; set; }
    public string PreviousSubject { get; set; }
    public string PreviousBody { get; set; }
}

 

 

원글 작성일  2016-12-23

댓글