Open Pop.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
'개발 > ASP.NET' 카테고리의 다른 글
ASP.NET http접속을 https로 리다이렉트 시키기 (0) | 2019.01.23 |
---|---|
ASP.NET MVC : 비연속의 Array 요소를 Model에 바인딩 시키기 (0) | 2019.01.23 |
log4net의 버젼 차이에 따른 문제 해결 (0) | 2019.01.21 |
timestamp/DateTime에서 현재시간을 기준으로 경과시간을 취득 (0) | 2019.01.21 |
EPPlus 템플릿 파일을 사용해서 엑셀파일을 작성 (0) | 2019.01.16 |
댓글