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(); } } } }
/// <summary> /// the name of database,normally it is the site name. /// If database not exists, it will be created. /// </summary> /// <param name="name"></param> /// <returns></returns> public static OrgDb OrgDb(Guid organizationId) { OrgDb result; if (_orgdbs.TryGetValue(organizationId, out result)) { return(result); } lock (_dbCreateLock) { if (_orgdbs.TryGetValue(organizationId, out result)) { return(result); } result = new OrgDb(organizationId); _orgdbs[organizationId] = result; } return(result); }
public EmailAddressRepository(OrgDb db) : base(db.Db) { this.orgdb = db; }