Example #1
0
        /// <summary>
        /// Сохранить сообщение
        /// </summary>
        /// <param name="mailBox"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task SaveMessageAsync(IMailBox mailBox, MimeMessage message)
        {
            var messageHash = message.MessageHash();

            _logger.Info($"Сообщение от {message.Date} хэш {messageHash}");
            var emailMessage = //await GetMessageByHashAsync(mailBox, messageHash) ??
                               await CreateMessageAsync(mailBox, message, messageHash);
        }
Example #2
0
        public TcpWriter(ActorId id, ActorsSystem system, IMailBox mailBox) : base(id, system, mailBox)
        {
            var serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000);

            _client = new TcpClient();
            _client.Connect(serverEndPoint);
            _clientStream = _client.GetStream();
        }
Example #3
0
        public async Task <EmailLoadingStatus> LoadFromEmailAsync(IMailBox mailBox)
        {
            foreach (var emailLoader in _emailLoaders.Where(c => c.ConnectionType == mailBox.Server.ConnectionType))
            {
                return(await emailLoader.LoadFromEmailAsync(mailBox));
            }

            return(EmailLoadingStatus.Active);
        }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Scheduler"/> class.
 /// </summary>
 /// <param name="mailBox">the mailbox.</param>
 public Scheduler(IMailBox mailBox)
 {
     this.mailBox      = mailBox;
     this.cancellation = new CancellationTokenSource();
     this.consumer     = new Thread(this.Consume)
     {
         IsBackground = true
     };
 }
Example #5
0
 public EmailMessageHandler(
     ILogger <EmailMessageHandler> logger,
     IMailBox mailBox,
     IRabbitMQService rabbitMQService)
 {
     MailBox          = mailBox;
     _logger          = logger;
     _rabbitMQService = rabbitMQService;
 }
 public ChequeController(
     IChequeRepository chequeRepository,
     IReportRenderer reportRenderer,
     IMailBox mailBox,
     IIoTHub hub, ICopterRepository copterRepository)
 {
     _chequeRepository = chequeRepository;
     _reportRenderer   = reportRenderer;
     _copterRepository = copterRepository;
     _mailBox          = mailBox;
     _hub = hub;
 }
Example #7
0
 public DefaultEmailMessageHandler(
     ILogger <DefaultEmailMessageHandler> logger,
     IMailBox mailBox,
     IMailAnalyzeService mailAnalyzeService,
     IContactService contactService,
     IHtmlConverterService htmlConverterService)
 {
     _logger               = logger;
     _mailAnalyzeService   = mailAnalyzeService;
     _contactService       = contactService;
     _htmlConverterService = htmlConverterService;
     MailBox               = mailBox;
 }
Example #8
0
        public override async Task <EmailLoadingStatus> LoadFromEmailAsync(IMailBox mailBox)
        {
            using (var client = new Pop3Client())
            {
                await ConnectAsync(client, mailBox.Server);
                await AuthorizeAsync(client, mailBox);

                Logger.Info($"Подключены к {mailBox.Login} c помощью {nameof(ImapLoader)}");
                await LoadMessagesAsync(mailBox, client);

                await client.DisconnectAsync(true, CancellationToken.None);
            }
            return(EmailLoadingStatus.Active);
        }
Example #9
0
 protected async Task AuthorizeAsync(IMailService client, IMailBox mailBox)
 {
     try
     {
         //TODO
         // Note: since we don't have an OAuth2 token, disable
         // the XOAUTH2 authentication mechanism.
         client.AuthenticationMechanisms.Remove("XOAUTH2");
         var password = StringCipher.Decrypt(mailBox.Password, mailBox.Login);
         await client.AuthenticateAsync(mailBox.Login, password);
     }
     catch (Exception ex)
     {
         throw new Exception($"Не удалось авторизоваться {mailBox.Login} - {ex.Message}", ex);
     }
 }
Example #10
0
        public override async Task <EmailLoadingStatus> LoadFromEmailAsync(IMailBox mailBox)
        {
            using (var client = new ImapClient())
            {
                await ConnectAsync(client, mailBox.Server);
                await AuthorizeAsync(client, mailBox);

                Logger.Info($"Подключены к {mailBox.Login} c помощью {nameof(ImapLoader)}");

                // The Inbox folder is always available on all IMAP servers...
                await  LoadFromFolderAsync(mailBox, client.Inbox.ParentFolder);

                await client.DisconnectAsync(true);
            }

            return(EmailLoadingStatus.Active);
        }
Example #11
0
        /// <summary>
        /// Загрузим сообщения
        /// </summary>
        /// <param name="mailBox"></param>
        /// <param name="client"></param>
        /// <returns></returns>
        private async Task LoadMessagesAsync(IMailBox mailBox, Pop3Client client)
        {
            var count = client.Count;

            for (var i = count - 1; i > 0; i--)
            {
                var message = await client.GetMessageAsync(i);

                // только такая проверка т.к. в POP3 без вариантов
                if (await MustBeSavedAsync(mailBox, message))
                {
                    await SaveMessageAsync(mailBox, message);

                    continue;
                }
                //если письмо сохранять не нужно то сразу выходим
                break;
            }
        }
Example #12
0
        /*
         * /// <summary>
         * /// Получить сообщение по Хэш
         * /// </summary>
         * /// <param name="messageHash"></param>
         * /// <returns></returns>
         * private async Task<EmailMessage> GetMessageByHashAsync(IMailBox mailBox, string messageHash)
         * {
         *   if (string.IsNullOrWhiteSpace(messageHash)) throw new ArgumentNullException(nameof(messageHash));
         *   var formattableString = MessageKey(mailBox, messageHash);
         *   return await _cacheService.GetAsync<EmailMessage>(formattableString, EmailMesageRegion);
         * }*/

        /// <summary>
        /// создать сообщения (без сохранения в бд)
        /// </summary>
        /// <param name="mailBox"></param>
        /// <param name="message"></param>
        /// <param name="messageHash"></param>
        /// <returns></returns>
        private async Task <EmailMessage> CreateMessageAsync(IMailBox mailBox, MimeMessage message, string messageHash)
        {
            //заполним основные поля
            var emailMessage = new EmailMessage
            {
                Subject = message.Subject,
                DateUtc = message.Date.UtcDateTime,
                Hash    = messageHash
            };

            _logger.Info($"Создано сообщение {messageHash}");

            using (var scope = _lifetimeScope.BeginLifetimeScope((builder) =>
            {
                builder.Register(c => mailBox).As <IMailBox>();
            }))
            {
                try
                {
                    var messageHandlers      = scope.Resolve <IEnumerable <IEmailMessageHandler> >();
                    var emailMessageHandlers = messageHandlers as IEmailMessageHandler[] ?? messageHandlers.ToArray();
                    foreach (var emailMessageHandler in emailMessageHandlers)
                    {
                        await emailMessageHandler.OnCreate(message, emailMessage);
                    }

                    foreach (var emailMessageHandler in emailMessageHandlers)
                    {
                        await emailMessageHandler.OnSaveAsync(emailMessage);
                    }
                }
                catch (EmailLoaderException exception)
                {
                    _logger.Log(LogLevel.Error, exception, $"Ошибка при обработке письма {messageHash}");
                }
            }

            //   var formattableString = MessageKey(mailBox, messageHash);
            //  await _cacheService.InsertAsync(formattableString, emailMessage, EmailMesageRegion, TimeSpan.FromDays(1));
            return(emailMessage);
        }
Example #13
0
        private async Task LoadFromFolderAsync(IMailBox mailBox, IMailFolder parentFolder)
        {
            var folders = await parentFolder.GetSubfoldersAsync();

            using (var folderEnumerator = folders.GetEnumerator())
            {
                while (folderEnumerator.MoveNext())
                {
                    if (MustBeOpen(folderEnumerator.Current))
                    {
                        var folder = folderEnumerator.Current;
                        await folder.OpenAsync(FolderAccess.ReadOnly);

                        if (folder.Count > 0)
                        {
                            for (var i = folder.Count - 1; i > 0; i--)
                            {
                                var message = await folder.GetMessageAsync(i);

                                // только такая проверка т.к. в POP3 без вариантов
                                if (await MustBeSavedAsync(mailBox, message))
                                {
                                    await SaveMessageAsync(mailBox, message);

                                    continue;
                                }
                                //если письмо сохранять не нужно то сразу выходим
                                break;
                            }
                        }
                        if ((folderEnumerator.Current.Attributes & FolderAttributes.HasChildren) != 0)
                        {
                            await LoadFromFolderAsync(mailBox, folderEnumerator.Current);
                        }
                    }
                }
            }
        }
Example #14
0
 public abstract Task <EmailLoadingStatus> LoadFromEmailAsync(IMailBox mailBox);
Example #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Address"/> class.
 /// </summary>
 /// <param name="mailBox">the mail box.</param>
 public Address(IMailBox mailBox)
 {
     this.mailBox = mailBox;
 }
Example #16
0
 /// <summary>
 /// Полное сохранение письма
 /// </summary>
 /// <param name="message"></param>
 /// <returns></returns>
 public async Task SaveMessageAsync(IMailBox mailBox, MimeMessage message)
 {
     await _emailMesageService.SaveMessageAsync(mailBox, message);
 }
Example #17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Address"/> class.
 /// </summary>
 /// <param name="mailBox">the mail box.</param>
 /// <param name="collector">the actor collector.</param>
 public Address(IMailBox mailBox, ICollector collector)
 {
     this.mailBox   = mailBox;
     this.collector = collector;
 }
Example #18
0
 protected Actor(ActorId id, ActorsSystem system, IMailBox mailBox)
 {
     Id      = id;
     System  = system;
     MailBox = mailBox;
 }
Example #19
0
 /// <summary>
 /// Проверка нужно ли сохранять сообщение из почты
 /// (проверяет нет ли такого же письма в бд и даты что подходят под рамки)
 /// </summary>
 /// <param name="message"></param>
 /// <returns></returns>
 protected async Task <bool> MustBeSavedAsync(IMailBox mailBox, MimeMessage message)
 {
     return(await _emailMesageService.MustBeSavedAsync(mailBox, message));
 }
Example #20
0
 public ClientConnectionWorker(ActorsSystem system, IMailBox mailBox)
     : base(ActorId.GenerateNew(), system, mailBox)
 {
 }
 public MigrationService(ILogWriter logger, IMailBox sourceMailAccount, IMailBox destinationMailAccount)
 {
     _logger = logger;
     _sourceMailAccount = sourceMailAccount;
     _destinationMailAccount = destinationMailAccount;
 }
Example #22
0
 public Test()
 {
     mail = new ProcessMailBox("TMProcessTest", 1024);
 }
Example #23
0
 public Test()
 {
     mail = new ProcessMailBox("TMProcessTest",1024);
 }
Example #24
0
 /// <summary>
 /// можно ли сохранить
 /// </summary>
 /// <param name="mailBox"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public Task <bool> MustBeSavedAsync(IMailBox mailBox, MimeMessage message)
 {
     return(Task.FromResult(message.Date.UtcDateTime > mailBox.LastStartTimeUtc));
 }
Example #25
0
        private static string MessageKey(IMailBox mailBox, string messageHash)
        {
            var formattableString = $"{mailBox.Login}:{messageHash}";

            return(formattableString);
        }
Example #26
0
        public RoundRobinActor(ActorId id, Func <Actor> workerFactory, int degreeOfParallelism, ActorsSystem system, IMailBox mailBox)
            : base(id, system, mailBox)
        {
            _workers = new Actor[degreeOfParallelism];

            for (int i = 0; i < degreeOfParallelism; i++)
            {
                _workers[i] = workerFactory();
            }
        }