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>()); }
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); }
public List <ImapResponse> Render(MailDb maildb, FetchMessage message, DataItem dataItem) { return(new List <ImapResponse> { new ImapResponse(dataItem.FullItemName + " " + message.Message.Id) }); }
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)); }
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); }
// 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); }
protected virtual void BeforeRender(MailDb maildb, FetchMessage message, DataItem dataItem) { if (!message.Message.Read) { message.Message.Read = true; maildb.Messages.Update(message.Message); } }
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)); }
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)); }
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) }); }
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()) }); }
/// <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)); }
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()) }); }
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(); }
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()) }); }
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(); } } } }
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) }); }
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) }); }
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); }
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); }
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); }
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; } } }
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); }
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); }
/// <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)); }
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); }
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); }
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()) }); }
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()) }); }
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); } } }