Example #1
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 #2
0
        /// <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);
        }
Example #3
0
 public EmailAddressRepository(OrgDb db)
     : base(db.Db)
 {
     this.orgdb = db;
 }