private static void AnalyzeMessage(MimeMessage message, LearningDataSet result) {
            result.Adresses.AddOrIgnore(message?.Sender?.Address);
            result.Subjects.AddOrIgnore(message?.Subject);

            var urls = UrlParser.Parse(message?.TextBody);
            foreach (var url in urls) {
                result.Urls.AddOrIgnore(url);
            }
        }
        public static void Analyze(IMailFolder folder, LearningDataSet result) {
            var messages = folder.Search(SearchQuery.All);

            if (messages.Count > 0) {
                foreach (var messageUid in messages) {
                    var message = folder.GetMessage(messageUid);

                    AnalyzeMessage(message, result);
                }
            }

            result.LastUpdate = DateTime.Now;
        }
        private void ProcessAnalysis(IMailFolder inbox) {
            if ((_mailBox.Spam == null) || (_mailBox.Spam.EnableSpamProtection == false)) {
                return;
            }

            _learningData = _learningStorage.Read();
            var needToUpdateData = _learningData.LastUpdate < DateTime.Now.Subtract(TimeSpan.FromMinutes(_mailBox.Spam.AnalysisInterval));
            if (needToUpdateData) {
                var targetFolder = inbox.GetSubfolder(_mailBox.Spam.Target);
                targetFolder.Open(FolderAccess.ReadOnly);

                MailBoxFolderAnalyzer.Analyze(targetFolder, _learningData);

                _learningStorage.Save(_learningData);
            }
        }
 public RuleGenerator(LearningDataSet learningDataSet, string targetFolder) {
     _learningDataSet = learningDataSet;
     _targetFolder = targetFolder;
 }
 public void Save(LearningDataSet dataSet) {
     var json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
     File.WriteAllText(GetHash(_mailBox), Cryptography.Encrypt(json));
 }