Example #1
0
        public static List <ImapResponse> Execute(MailDb mailDb, IEnumerable <FetchMessage> messages, string folderName)
        {
            var prasedFolder = Utility.FolderUtility.ParseFolder(folderName);

            var folder = mailDb.Folders.Get(prasedFolder.FolderId);

            if (folder == null)
            {
                throw new CommandException("NO", "Can't copy those messages or to that name");
            }

            foreach (var each in messages)
            {
                var message = each.Message;
                var flags   = mailDb.Messages.GetFlags(message.Id);

                message.Id       = 0;
                message.FolderId = folder.Id;

                if (message.AddressId == 0)
                {
                    message.AddressId = prasedFolder.AddressId;
                }

                mailDb.Messages.Add(message);
                flags = flags.Except(new string[] { "Deleted" }).ToArray();
                mailDb.Messages.UpdateRecent(message.Id);
                mailDb.Messages.ReplaceFlags(message.Id, flags);
            }

            return(new List <ImapResponse>());
        }
Example #2
0
        public static List <ImapResponse> ExecuteNew(MailDb Maildb, List <FetchMessage> messages, string dataItem, string[] flags, bool silent)
        {
            var response = new List <ImapResponse>();

            foreach (var each in messages)
            {
                switch (dataItem)
                {
                case "FLAGS":
                    Maildb.Messages.ReplaceFlags(each.Message.Id, flags);
                    break;

                case "+FLAGS":
                    Maildb.Messages.AddFlags(each.Message.Id, flags);
                    break;

                case "-FLAGS":
                    Maildb.Messages.RemoveFlags(each.Message.Id, flags);
                    break;

                default:
                    throw new Exception("Error in argument");
                }

                if (!silent)
                {
                    var eachflags = Maildb.Messages.GetFlags(each.Message.Id);
                    var flagStr   = String.Join(" ", eachflags.Select(o => "\\" + o));
                    response.Add(new ImapResponse($"* {each.SeqNo} FETCH ({flagStr})"));
                }
            }
            return(response);
        }
Example #3
0
File: UID.cs Project: xhute/Kooboo
 public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
 {
     return(new List <ImapResponse>
     {
         new ImapResponse(dataItem.FullItemName + " " + message.Message.Id)
     });
 }
Example #4
0
        public static List <ImapResponse> GetResponse(DataItem dataItem, MailDb maildb, FetchMessage message)
        {
            string Name = dataItem.Name.ToUpper();
            var    item = List.Find(o => o.Name == Name);

            return(item.Render(maildb, message, dataItem));
        }
Example #5
0
        public static List <int> Execute(MailDb maildb, SelectFolder Folder, List <SearchItem> SearchItems, Func <MailDb, SelectFolder, Message, int> toResult)
        {
            // return list of seqno.
            var StartCol = FindStartCollectionItems(ref SearchItems);

            var Msgs = GetCollection(maildb, Folder, StartCol);

            List <int> result = new List <int>();

            foreach (var msg in Msgs)
            {
                bool match = true;

                foreach (var searchitem in SearchItems)
                {
                    if (!Check(maildb, Folder, searchitem, msg))
                    {
                        match = false;
                        break;
                    }
                }

                if (match)
                {
                    result.Add(toResult(maildb, Folder, msg));
                }
            }

            return(result);
        }
Example #6
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAll", p =>
                {
                    p.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials();
                });
            });

            // Initialize all classes instances for the BL and DAL
            FinanceDb finance     = new FinanceDb();
            MailDb    mails       = new MailDb();
            var       mailHandler = new MailHandler("*****@*****.**", "Michael", "Miki2995*", mails.UserMailRecipients);
            var       rContainer  = new RouteContainer(mailHandler, "Finance Route was used and this is the result");
            var       routes      = new Dictionary <string, IRoute>()
            {
                { "finance", new FinanceRoute(rContainer, finance.MoneyList) }
            };

            services.AddSingleton <IRequestRouter>(new SimpleRequestRouter(routes));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
Example #7
0
 protected virtual void BeforeRender(MailDb maildb, FetchMessage message, DataItem dataItem)
 {
     if (!message.Message.Read)
     {
         message.Message.Read = true;
         maildb.Messages.Update(message.Message);
     }
 }
Example #8
0
        public static List <ImapResponse> ExecuteByUid(MailDb mailDb, SelectFolder folder, string args)
        {
            var storeArgs = ParseStoreArgs(args);

            var messages = ImapHelper.GetMessagesByUid(mailDb, folder, storeArgs.Ranges);

            return(ExecuteNew(mailDb, messages, storeArgs.DataItem, storeArgs.Flags, storeArgs.Silent));
        }
Example #9
0
        public static List <ImapResponse> ExecuteByUid(MailDb mailDb, SelectFolder folder, string args)
        {
            var copyArgs = ParseArgs(args);

            var messages = ImapHelper.GetMessagesByUid(mailDb, folder, copyArgs.Ranges);

            return(Execute(mailDb, messages, copyArgs.FolderName));
        }
Example #10
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var timeStr = ToDateTimeString(message.Message.CreationTime);

            return(new List <ImapResponse>
            {
                new ImapResponse(dataItem.FullItemName + " " + timeStr)
            });
        }
Example #11
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var builder = new StructureBuilder();

            ConstructEnvelope(builder, message.Parsed);

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString())
            });
        }
Example #12
0
        /// <summary>
        /// FETCH
        /// </summary>
        public static List <ImapResponse> GenerateBySeqId(MailDb mailDb, SelectFolder Folder, string Cmd)
        {
            var cmdReader = new CommandReader(Cmd);
            var set       = cmdReader.SequenceSet;
            var range     = GetSequenceRange(set);

            var AllDataItems = cmdReader.ReadAllDataItems();

            var messages = ImapHelper.GetMessagesBySeqNo(mailDb, Folder, range);

            return(Generate(mailDb, Folder, AllDataItems, messages));
        }
Example #13
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var builder = new StructureBuilder()
                          .Append(dataItem.FullItemName)
                          .Append(" ");

            ConstructParts(builder, message.Parsed, true);

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString())
            });
        }
Example #14
0
        public async Task InitAsync()
        {
            Configuration = new ConfigurationBuilder()
                            .AddJsonFile("appsettings.json")
                            .AddEnvironmentVariables()
                            .Build();
            var options = new DbContextOptionsBuilder <MailDb>()
                          .UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
                          .Options;

            _db = new MailDb(options);
            await _db.Database.MigrateAsync();
        }
Example #15
0
        public List <ImapResponse> RenderBodyStructure(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            // non-extensions BODYSTRUCTURE
            var builder = new StructureBuilder()
                          .Append("BODYSTRUCTURE ");

            BODYSTRUCTURE.ConstructParts(builder, message.Parsed, false);

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString())
            });
        }
Example #16
0
        public static async Task Receive(OrgDb orgdb, MailDb maildb, EmailAddress address, string MailFrom, string messagebody, Message msg)
        {
            // always in first.
            var folder = Spam.SpamFilter.DetermineFolder();

            msg.FolderId = folder.Id;
            maildb.Messages.Add(msg, messagebody);

            if (address.AddressType == EmailAddressType.Forward)
            {
                MailFrom = Utility.AddressUtility.GetAddress(MailFrom);

                if (address.ForwardAddress != null && Utility.AddressUtility.IsValidEmailAddress(address.ForwardAddress))
                {
                    var newbody = Kooboo.Mail.Utility.ComposeUtility.ComposeForwardAddressMessage(messagebody);

                    if (!string.IsNullOrEmpty(newbody))
                    {
                        List <string> forwardtos = new List <string>();
                        forwardtos.Add(address.ForwardAddress);
                        await Receive(MailFrom, forwardtos, newbody);
                    }
                }
            }

            else if (address.AddressType == EmailAddressType.Group)
            {
                MailFrom = Utility.AddressUtility.GetAddress(MailFrom);

                GroupMail group   = new GroupMail();
                string    newbody = Utility.ComposeUtility.ComposeGroupMail(messagebody, address.Address);

                if (!string.IsNullOrEmpty(newbody))
                {
                    var memebers = orgdb.EmailAddress.GetMembers(address.Id);
                    group.MailFrom       = MailFrom;
                    group.Members        = RemoveSelfMembers(memebers.ToList(), address.Address, MailFrom);
                    group.MessageContent = newbody;

                    if (group.Members.Count() <= 5)
                    {
                        await Receive(MailFrom, group.Members, newbody);
                    }
                    else
                    {
                        Queue.QueueManager.AddGroupMail(group);
                        await Queue.QueueManager.Execute();
                    }
                }
            }
        }
Example #17
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var parsed = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(message.Bytes);
            var bytes  = parsed.Body.ToByte();

            var builder = new StringBuilder()
                          .Append(dataItem.FullItemName).Append(" {").Append(bytes.Length).Append("}");

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString()),
                new ImapResponse(bytes)
            });
        }
Example #18
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var parsed = LumiSoft.Net.Mail.Mail_Message.ParseFromByte(message.Bytes);
            var bytes  = parsed.Header.ToByte(new MIME_Encoding_EncodedWord(MIME_EncodedWordEncoding.B, Encoding.UTF8), Encoding.UTF8);

            bytes = bytes.Concat(new byte[] { 0x0D, 0x0A }).ToArray();

            var builder = new StringBuilder()
                          .Append(dataItem.FullItemName).Append(" {").Append(bytes.Length).Append("}");

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString()),
                new ImapResponse(bytes)
            });
        }
Example #19
0
        public static List <ImapResponse> Execute(MailDb maildb, SelectFolder Folder, string args, Func <MailDb, SelectFolder, Message, int> toResult)
        {
            var cmdreader = new SearchCommand.CommandReader(args);

            var allitems = cmdreader.ReadAllDataItems();

            var searchResult = Execute(maildb, Folder, allitems, toResult);

            List <ImapResponse> result = new List <ImapResponse>();

            var line = ResultLine.SEARCH(searchResult);

            result.Add(new ImapResponse(line));

            return(result);
        }
Example #20
0
 public static bool CheckDate(MailDb maildb, Message message, string Keyword, DateTime Value)
 {
     /// BEFORE SENTBEFORE SENTON SENTSINCE SINCE ON
     if (Keyword == "BEFORE" || Keyword == "SENTBEFORE")
     {
         return(message.CreationTime < Value);
     }
     else if (Keyword == "SINCE" || Keyword == "SENTSINCE")
     {
         return(message.CreationTime > Value);
     }
     else if (Keyword == "ON" || Keyword == "SENTON")
     {
         return(message.CreationTime.DayOfYear == Value.DayOfYear && message.CreationTime.Year == Value.Year);
     }
     return(false);
 }
Example #21
0
        public static List <ImapResponse> Generate(MailDb maildb, SelectFolder Folder, List <DataItem> DataItems, List <FetchMessage> messages)
        {
            var response = new List <ImapResponse>();

            foreach (var message in messages)
            {
                var builder = new StringBuilder()
                              .Append("* " + message.SeqNo + " FETCH (");

                bool firstDataItem = true;
                foreach (var dataitem in DataItems)
                {
                    var itemResponse = ResponseManager.GetResponse(dataitem, maildb, message);
                    foreach (var each in itemResponse)
                    {
                        if (each.Line != null)
                        {
                            // Continue to append string if it's string
                            if (firstDataItem)
                            {
                                firstDataItem = false;
                            }
                            else
                            {
                                builder.Append(" ");
                            }

                            builder.Append(each.Line);
                        }
                        else
                        {
                            // Otherwise end the string and add bytes
                            response.Add(new ImapResponse(builder.ToString()));
                            response.Add(each);
                            builder.Clear();
                        }
                    }
                }

                builder.Append(")");
                response.Add(new ImapResponse(builder.ToString()));
            }

            return(response);
        }
Example #22
0
        private void MarkStatus(MailDb maildb, List <Message> msgs)
        {
            foreach (var item in msgs)
            {
                var status = maildb.Messages.Store.GetFromColumns(item.Id);
                if (status != null)
                {
                    item.Read     = status.Read;
                    item.Answered = status.Answered;
                    item.Deleted  = status.Deleted;
                    item.Flagged  = status.Flagged;
                }

                if (item.Date == default(DateTime))
                {
                    item.Date = item.CreationTime;
                }
            }
        }
Example #23
0
        public static List <Commands.FetchCommand.FetchMessage> GetMessagesBySeqNo(MailDb mailDb, SelectFolder Folder, List <Range> ranges)
        {
            CorrectRange(ranges, Folder, false);

            var messages = new List <Commands.FetchCommand.FetchMessage>();

            foreach (var item in ranges)
            {
                var dbMessages = mailDb.Messages.GetBySeqNos(Folder.Folder, Folder.Stat.LastestMsgId, Folder.Stat.Exists, item.LowBound, item.UpBound);
                var seqNo      = item.LowBound;
                messages.AddRange(dbMessages.Select(o => new Commands.FetchCommand.FetchMessage
                {
                    MailDb  = mailDb,
                    Message = o,
                    SeqNo   = seqNo++
                }));
            }

            return(messages);
        }
Example #24
0
        public static List <Commands.FetchCommand.FetchMessage> GetMessagesByUid(MailDb mailDb, SelectFolder Folder, List <Range> ranges)
        {
            CorrectRange(ranges, Folder, true);

            var messages = new List <Commands.FetchCommand.FetchMessage>();

            foreach (var item in ranges)
            {
                var messagesInRange = mailDb.Messages.ByUidRange(Folder.Folder, item.LowBound, item.UpBound);
                foreach (var message in messagesInRange)
                {
                    messages.Add(new Commands.FetchCommand.FetchMessage
                    {
                        MailDb  = mailDb,
                        Message = message,
                        SeqNo   = mailDb.Messages.GetSeqNo(Folder.Folder, Folder.Stat.LastestMsgId, Folder.Stat.Exists, message.Id)
                    });
                }
            }

            return(messages);
        }
Example #25
0
        /// <summary>
        /// UID FETCH
        /// </summary>
        public static List <ImapResponse> GenerateByUid(MailDb mailDb, SelectFolder Folder, string Cmd)
        {
            var cmdReader = new CommandReader(Cmd);
            var set       = cmdReader.SequenceSet;
            var range     = GetSequenceRange(set);

            var AllDataItems = cmdReader.ReadAllDataItems();

            var messages = ImapHelper.GetMessagesByUid(mailDb, Folder, range);

            // Auto include UID data item
            if (!AllDataItems.Any(o => o.Name == "UID"))
            {
                AllDataItems.Insert(0, new DataItem
                {
                    Name         = "UID",
                    FullItemName = "UID"
                });
            }

            return(Generate(mailDb, Folder, AllDataItems, messages));
        }
Example #26
0
        public SelectFolder(string folder, MailDb maildb)
        {
            if (folder == null)
            {
                throw new CommandException("BAD", "Folder not provided");
            }
            this.mailDb = maildb;
            this.Folder = folder;

            var prasedfolder = Utility.FolderUtility.ParseFolder(folder);

            var dbfolder = this.mailDb.Folders.Get(prasedfolder.FolderId);

            if (dbfolder == null)
            {
                throw new CommandException("NO", "No such a folder");
            }

            this.FolderId  = prasedfolder.FolderId;
            this.AddressId = prasedfolder.AddressId;

            this.Stat = this.mailDb.Messages.GetStat(this.FolderId, this.AddressId);
        }
Example #27
0
        public static MailDb UserMailDb(Guid userId, Guid OrganizationId)
        {
            string key     = userId.ToString() + OrganizationId.ToString();
            Guid   guidkey = Lib.Security.Hash.ComputeGuidIgnoreCase(key);

            MailDb result;

            if (_maildbs.TryGetValue(guidkey, out result))
            {
                return(result);
            }

            lock (_dbCreateLock)
            {
                if (_maildbs.TryGetValue(guidkey, out result))
                {
                    return(result);
                }

                result            = new MailDb(userId, OrganizationId);
                _maildbs[guidkey] = result;
            }
            return(result);
        }
Example #28
0
        public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem)
        {
            var flags = maildb.Messages.GetFlags(message.Message.Id);

            var result = new StringBuilder()
                         .Append(dataItem.FullItemName)
                         .Append(" (");

            for (int i = 0; i < flags.Length; i++)
            {
                if (i > 0)
                {
                    result.Append(" ");
                }
                result.Append("\\").Append(flags[i]);
            }

            result.Append(")");

            return(new List <ImapResponse>
            {
                new ImapResponse(result.ToString())
            });
        }
Example #29
0
        public static List <ImapResponse> Execute(MailDb mailDb, string args)
        {
            var parts = TextUtils.SplitQuotedString(args, ' ', false, 2);

            string folderName = IMAP_Utils.DecodeMailbox(TextUtils.UnQuoteString(parts[0]));

            if (!(parts[1].StartsWith("(") && parts[1].EndsWith(")")))
            {
                throw new Exception("Error in arguments.");
            }

            var index     = args.IndexOf(" ");
            var folderArg = args.Substring(0, index);

            var folder = new SelectFolder(folderName, mailDb);
            var stat   = folder.Stat;

            var commandReader = new CommandReader(parts[1]);
            var AllDataItems  = commandReader.ReadAllDataItems();

            var builder = new StringBuilder()
                          .Append("* STATUS ").Append(folderArg).Append(" (");

            var first = true;

            foreach (var each in AllDataItems)
            {
                if (!first)
                {
                    builder.Append(" ");
                }
                switch (each.Name)
                {
                case "MESSAGES":
                    builder.Append("MESSAGES ").Append(stat.Exists);
                    break;

                case "RECENT":
                    builder.Append("RECENT ").Append(stat.Recent);
                    break;

                case "UIDNEXT":
                    builder.Append("UIDNEXT ").Append(stat.NextUid);
                    break;

                case "UIDVALIDITY":
                    builder.Append("UIDVALIDITY ").Append(stat.FolderUid);
                    break;

                case "UNSEEN":
                    builder.Append("UNSEEN ").Append(stat.UnSeen);
                    break;

                default:
                    break;
                }
                if (first)
                {
                    first = false;
                }
            }

            builder.Append(")");

            return(new List <ImapResponse>
            {
                new ImapResponse(builder.ToString())
            });
        }
Example #30
0
        public static void MainLogic(object sender)
        {
            try
            {
                // Получаем все письма с почтового ящика
                //IEnumerable<MailMessage> messages = GetMessages();
                // Сохраняем полученные файлы во временный каталог
                //SaveMail(messages);

                // Получаем все файлы с информацией об авиа билетах и багаже
                IEnumerable <FileInfo> aviaFiles    = GetFiles("electronic ticket");
                IEnumerable <FileInfo> baggageFiles = GetFiles("baggage");

                Parser parser = new Parser();

                AviaTicket  ticket  = null;
                AviaBaggage baggage = null;

                foreach (FileInfo item in aviaFiles)
                {
                    try
                    {
                        ticket = parser.ParseAviaTicket(item.FullName);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(item.FullName);
                    }

                    using (MailDb db = new MailDb())
                    {
                        var query = from t in db.Tickets
                                    where t.TicketNumber == ticket.TicketNumber
                                    select t;

                        if (query.Count() == 0)
                        {
                            db.Tickets.Add(new Ticket()
                            {
                                TicketNumber = ticket.TicketNumber, Agent = ticket.Agent
                            });
                            db.SaveChanges();
                            SaveFileToXML(ticket);
                        }
                    }
                }

                foreach (FileInfo item in baggageFiles)
                {
                    try
                    {
                        baggage = parser.ParseAviaBaggage(item.FullName);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(item.FullName);
                    }


                    using (MailDb db = new MailDb())
                    {
                        var query = from b in db.Baggages
                                    where b.BaggageNumber == baggage.No
                                    select b;

                        if (query.Count() == 0)
                        {
                            db.Baggages.Add(new Baggage()
                            {
                                BaggageNumber = baggage.No
                            });
                            db.SaveChanges();
                            SaveFileToXML(baggage);
                        }
                    }
                }

                Console.WriteLine("End parsing!");
                DirectoryInfo tempFolder = new DirectoryInfo(@".\AviaTicketsFromMail");
                try
                {
                    //tempFolder.Delete(true);
                }
                catch (Exception ex) { }
            }
            catch (Exception ex)
            {
                string str = $"Date: {DateTime.Now}\nError: {ex.Message}\nStackTrace: {ex.StackTrace}";
                using (StreamWriter writer = new StreamWriter(@"error.log", true, Encoding.UTF8))
                {
                    writer.WriteLine(str);
                }
            }
        }