public IList<Stream> Load(Mailbox mailbox) { IList<Stream> result = new List<Stream>(); using (var client = new Pop3Client()) { client.Connect(mailbox.Server, mailbox.Port, mailbox.Ssl); client.Authenticate(mailbox.Username, mailbox.Password); var msgCount = client.Count; Console.WriteLine("[{2}] - [{1}] {0} new messages found", msgCount, mailbox.Username, DateTime.Now); for (var li = 0; li < msgCount; li++) { try { var letter = client.GetMessage(li); var parts = letter.BodyParts; foreach (var part in parts) { if (part.IsAttachment) { var stream = new MemoryStream(); ((MimePart)part).ContentObject.WriteTo(stream); stream.Position = 0; result.Add(stream); } } } catch (Exception ex) { Console.WriteLine("Message recieve error: {0}", ex.Message); } finally { client.DeleteMessage(li); } } client.Disconnect(true); } return result; }
private void OnProcess(Mailbox mailbox, CancellationToken cancellationToken) { Console.WriteLine("[{0}] monitoring started", mailbox.Name); while (!cancellationToken.IsCancellationRequested) { using (var scope = _objectFactory.CreateScope()) { IMailReciever mailReciever = scope.Resolve<IMailReciever>(); IReportRegistry reportRegistry = scope.Resolve<IReportRegistry>(); ICsvReader csvReader = scope.Resolve<ICsvReader>(); IList<Stream> data = null; try { data = mailReciever.Load(mailbox); foreach (var stream in data) { var dtos = csvReader.Read(stream); if (!dtos.Any()) continue; reportRegistry.Save(dtos); } } catch (Exception e) { Console.WriteLine("[{1}] iteration failed: {0}", e.Message, mailbox.Name); } finally { Dispose(data); } } cancellationToken.WaitHandle.WaitOne(mailbox.Delay); } }
private void OnProcess(Mailbox mailbox, CancellationToken cancellationToken) { Console.WriteLine("[{1}] - [{0}] monitoring started", mailbox.Name, DateTime.Now); while (!cancellationToken.IsCancellationRequested) { using (var scope = _objectFactory.CreateScope()) { IMailReciever mailReciever = scope.Resolve<IMailReciever>(); IReportRegistry reportRegistry = scope.Resolve<IReportRegistry>(); ICsvReader csvReader = scope.Resolve<ICsvReader>(); IList<Stream> data = null; try { data = mailReciever.Load(mailbox); foreach (var stream in data) { using (var reader = new StreamReader(stream)) { var messageBase64 = reader.ReadToEnd(); var message = Encoding.UTF8.GetString(Convert.FromBase64String(messageBase64)); var dtos = csvReader.Read(message); if (!dtos.Any()) continue; var report = reportRegistry.Save(dtos); SendNewReportNotification(report, dtos); } } } catch (Exception e) { Console.WriteLine("[{1}] iteration failed: {0}", e.Message, mailbox.Name); } finally { Dispose(data); } } cancellationToken.WaitHandle.WaitOne(mailbox.Delay); } }