Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }