Created
April 11, 2012 02:35
-
-
Save meboz/2356475 to your computer and use it in GitHub Desktop.
C# Pop3 CLient
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface IPop3Client : IDisposable { | |
void Connect(); | |
List<string> GetMessageUids(); | |
MessageHeader GetMessageHeaders(int messageNumber); | |
Message GetMessage(int messageNumber); | |
IEnumerable<Message> FetchMessagesLike(string emailedToRegex); | |
IEnumerable<Message> FetchMessagesFrom(string[] to); | |
void DeleteMessage(int messageNumber); | |
void DeleteMessages(IList<Message> messages); | |
} | |
public class CustomPop3Client : IPop3Client | |
{ | |
private readonly string _hostname; | |
private readonly string _email; | |
private readonly string _password; | |
private Pop3Client _client; | |
public CustomPop3Client(string hostname, string email, string password) | |
{ | |
_hostname = hostname; | |
_email = email; | |
_password = password; | |
_client = new Pop3Client(); | |
} | |
public void Connect() | |
{ | |
_client.Connect(_hostname, 110, false); | |
_client.Authenticate(_email, _password); | |
} | |
public List<string> GetMessageUids() | |
{ | |
return _client.GetMessageUids(); | |
} | |
public MessageHeader GetMessageHeaders(int messageNumber) | |
{ | |
return _client.GetMessageHeaders(messageNumber); | |
} | |
public Message GetMessage(int messageNumber) | |
{ | |
return _client.GetMessage(messageNumber); | |
} | |
public IEnumerable<Message> FetchMessagesLike(string pattern) | |
{ | |
var hdrs = FetchAllMessageHeaders(); | |
var matchingMessages = new List<Message>(); | |
var toRegex = new Regex(pattern, RegexOptions.IgnoreCase); | |
for (var i = 0; i < hdrs.Count(); i++) | |
{ | |
var to = hdrs.ElementAt(i).To.First().MailAddress.Address; | |
if (toRegex.IsMatch(to)) | |
{ | |
var matchingMessage = _client.GetMessage(i + 1); | |
matchingMessages.Add(matchingMessage); | |
} | |
} | |
return matchingMessages; | |
} | |
public IEnumerable<Message> FetchMessagesFrom(string[] toAddresses) | |
{ | |
var hdrs = FetchAllMessageHeaders(); | |
var matchingMessages = new List<Message>(); | |
for (var i = 0; i < hdrs.Count(); i++) { | |
var to = hdrs.ElementAt(i).To.First().MailAddress.Address; | |
if (toAddresses.Contains(to,StringComparer.InvariantCultureIgnoreCase)) { | |
var matchingMessage = _client.GetMessage(i + 1); | |
matchingMessages.Add(matchingMessage); | |
DeleteMessage(i + 1); | |
} | |
} | |
return matchingMessages; | |
} | |
public IEnumerable<MessageHeader> FetchAllMessageHeaders() | |
{ | |
var uids = _client.GetMessageUids(); | |
var msgHeaders = new List<MessageHeader>(); | |
for (var i = 0; i < uids.Count; i++) { | |
var hdrs = _client.GetMessageHeaders(i + 1); | |
msgHeaders.Add(hdrs); | |
} | |
return msgHeaders; | |
} | |
public void DeleteMessage(int messageNumber) | |
{ | |
_client.DeleteMessage(messageNumber); | |
} | |
public void DeleteMessages(IList<Message> messages) | |
{ | |
var uids = _client.GetMessageUids(); | |
for (var i = 0; i < uids.Count; i++) | |
{ | |
var hdrs = _client.GetMessageHeaders(i + 1); | |
var messageToDelete = messages.SingleOrDefault(m => m.Headers.MessageId == hdrs.MessageId); | |
if(messageToDelete != null) | |
_client.DeleteMessage(i); | |
} | |
} | |
public void Dispose() | |
{ | |
_client.Disconnect(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment