Beispiel #1
0
        public ServiceResult GetMessages()
        {
            EmailMessageManager um = new EmailMessageManager(Globals.DBConnectionKey, Request.Headers?.Authorization?.Parameter);

            int count;

            DataFilter     tmpFilter = this.GetFilter(Request);
            List <dynamic> emails    = um.GetEmailMessages(CurrentUser.UUID, tmpFilter, out count);

            return(ServiceResponse.OK("", emails, count));
        }
Beispiel #2
0
        public ServiceResult Delete(string UUID)
        {
            if (string.IsNullOrWhiteSpace(UUID))
            {
                return(ServiceResponse.Error("No UUID sent."));
            }

            EmailMessageManager emailManager = new EmailMessageManager(Globals.DBConnectionKey, Request.Headers?.Authorization?.Parameter);

            var res = emailManager.Get(UUID);

            if (res.Code != 200)
            {
                return(ServiceResponse.Error("Email not found."));
            }

            var email = (EmailMessage)res.Result;

            email.Deleted = true;
            return(emailManager.Update(email));
        }
Beispiel #3
0
 public EmailMessageController(EmailMessageManager emailMessageManager)
 {
     _emailMessageManager = emailMessageManager;
 }
Beispiel #4
0
        public async Task <ServiceResult> SendMessage(EmailMessage form)//        public  ServiceResult SendMessage(Message form)
        {
            if (form == null)
            {
                return(ServiceResponse.Error("No form was posted to the server."));
            }

            try
            {
                form.DateSent = DateTime.UtcNow;

                bool isValidFormat = Validator.IsValidEmailFormat(form.EmailFrom);
                if (string.IsNullOrWhiteSpace(form.EmailFrom) || isValidFormat == false)
                {
                    return(ServiceResponse.Error("You must provide a valid email address."));
                }

                if (string.IsNullOrWhiteSpace(form.Body))
                {
                    return(ServiceResponse.Error("You must provide a message."));
                }
                EmailMessageManager EmailMessageManager = new EmailMessageManager(Globals.DBConnectionKey, Request?.Headers?.Authorization?.Parameter);
                NetworkHelper       network             = new NetworkHelper();
                string ipAddress = network.GetClientIpAddress(this.Request);

                EmailMessage EmailMessage = new EmailMessage();
                EmailMessage.Body      = form.Body + "<br/><br/><br/>Message Key:" + EmailMessage.UUID;
                EmailMessage.Subject   = form.Subject;
                EmailMessage.EmailFrom = Cipher.Crypt(Globals.Application.AppSetting("AppKey"), form.EmailFrom.ToLower(), true);
                EmailMessage.UUIDType += "." + form.Type;

                if (form.Type?.ToLower() != "contactus")
                {
                    EmailMessage.EmailTo = Globals.Application.AppSetting("SiteEmail");
                }

                EmailMessage.DateCreated = DateTime.UtcNow;
                EmailMessage.IpAddress   = ipAddress;
                EmailMessage.Status      = "not_sent";

                if (CurrentUser != null)
                {
                    EmailMessage.CreatedBy   = CurrentUser.UUID;
                    EmailMessage.AccountUUID = CurrentUser.AccountUUID;
                }
                else
                {
                    EmailMessage.CreatedBy   = "ContactUsForm";
                    EmailMessage.AccountUUID = "ContactUsForm";
                }

                UserManager um       = new UserManager(Globals.DBConnectionKey, Request?.Headers?.Authorization?.Parameter);
                string      toName   = um.GetUserByEmail(EmailMessage.EmailTo)?.Name;
                string      fromName = um.GetUserByEmail(form.EmailFrom)?.Name;
                EmailMessage.NameFrom = fromName;
                EmailMessage.NameTo   = toName;

                if (EmailMessageManager.Insert(EmailMessage).Code == 500)
                {
                    return(ServiceResponse.Error("Failed to save the email. Try again later."));
                }

                EmailSettings settings = new EmailSettings();
                settings.EncryptionKey = Globals.Application.AppSetting("AppKey");
                settings.HostPassword  = Globals.Application.AppSetting("EmailHostPassword");
                settings.HostUser      = Globals.Application.AppSetting("EmailHostUser");
                settings.MailHost      = Globals.Application.AppSetting("MailHost");
                settings.MailPort      = StringEx.ConvertTo <int>(Globals.Application.AppSetting("MailPort"));
                settings.SiteDomain    = Globals.Application.AppSetting("SiteDomain");
                settings.EmailDomain   = Globals.Application.AppSetting("EmailDomain");
                settings.SiteEmail     = Globals.Application.AppSetting("SiteEmail");
                settings.UseSSL        = StringEx.ConvertTo <bool>(Globals.Application.AppSetting("UseSSL"));

                MailAddress ma   = new MailAddress(settings.SiteEmail, settings.SiteEmail);
                MailMessage mail = new MailMessage();
                mail.From = ma;
                // mail.ReplyToList.Add( ma );
                mail.ReplyToList.Add(form.EmailFrom);
                mail.To.Add(EmailMessage.EmailTo);
                mail.Subject    = EmailMessage.Subject;
                mail.Body       = EmailMessage.Body + "<br/><br/><br/>IP:" + ipAddress;
                mail.IsBodyHtml = true;
                SMTP svc = new SMTP(Globals.DBConnectionKey, settings);
                return(svc.SendMail(mail));
            }
            catch (Exception ex)
            {
                _fileLogger.InsertError(ex.DeserializeException(true), "SiteController", "SendMessage:" + JsonConvert.SerializeObject(form));
            }
            return(ServiceResponse.Error("Failed to send message."));
        }
Beispiel #5
0
        /// <inheritdoc />
        public override List <QueueToIndex> ProcessingMergedIndexQueue(List <KeyValuePair <string, object> > mergedIndexQueueItem, long id, Guid typeUid)
        {
            var list = new List <QueueToIndex>();

            if (mergedIndexQueueItem == null)
            {
                return(list);
            }
            var queueToIndex = new QueueToIndex
            {
                Id         = id,
                CardType   = typeof(IEmailMessageFullTextSearchObject),
                Properties = new List <KeyValuePair <string, object> >()
            };

            var idPair = mergedIndexQueueItem.Find(
                p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.Id)));

            if (idPair.Key != null)
            {
                queueToIndex.Properties.Add(
                    new KeyValuePair <string, object>(
                        LinqUtils.NameOf((IEmailMessageFullTextSearchObject d) => d.Id),
                        idPair.Value));
            }
            var typeUidPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.TypeUid)));

            if (typeUidPair.Key != null)
            {
                queueToIndex.Properties.Add(
                    new KeyValuePair <string, object>(
                        LinqUtils.NameOf((IEmailMessageFullTextSearchObject d) => d.TypeUid),
                        typeUidPair.Value));
            }
            var deletedPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.IsDeleted)));

            if (deletedPair.Key != null)
            {
                queueToIndex.Properties.Add(
                    new KeyValuePair <string, object>(
                        LinqUtils.NameOf((IEmailMessageFullTextSearchObject d) => d.IsDeleted), deletedPair.Value));
            }
            var datePair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.DateUtc)));

            if (datePair.Key != null)
            {
                queueToIndex.Properties.Add(
                    new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                          (IEmailMessageFullTextSearchObject d) => d.DateUtc),
                                                      datePair.Value));
            }
            var subjectPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.Subject)));

            if (subjectPair.Key != null)
            {
                queueToIndex.Properties.Add(
                    new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                          (IEmailMessageFullTextSearchObject d) => d.Subject),
                                                      subjectPair.Value));
            }
            var textPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.Text)));

            if (textPair.Key != null)
            {
                if (textPair.Value != null)
                {
                    var textPairValue = textPair.Value.ToString();
                    queueToIndex.Properties.Add(
                        new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                              (IEmailMessageFullTextSearchObject d) => d.Text),
                                                          textPairValue));
                }
            }

            var fromPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.From)));
            var toPair   = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.To)));

            if (toPair.Key != null || fromPair.Key != null)
            {
                var emailMessage = EmailMessageManager.LoadOrNull(id);
                if (emailMessage != null)
                {
                    var from =
                        emailMessage.From.Select(c => c.EmailString).ToArray();
                    var to =
                        emailMessage.To.Select(c => c.EmailString).ToArray();
                    queueToIndex.Properties.Add(
                        new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                              (IEmailMessageFullTextSearchObject d) => d.From),
                                                          new SerializableList <object>(from)));
                    queueToIndex.Properties.Add(
                        new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                              (IEmailMessageFullTextSearchObject d) => d.To),
                                                          new SerializableList <object>(to)));
                    queueToIndex.Properties.Add(
                        new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                              (IEmailMessageFullTextSearchObject d) => d.Contractors),
                                                          new SerializableList <long>(emailMessage.Contractors.Select(c => c.Id).ToArray())));
                    queueToIndex.Properties.Add(
                        new KeyValuePair <string, object>(LinqUtils.NameOf(
                                                              (IEmailMessageFullTextSearchObject d) => d.Contacts),
                                                          new SerializableList <long>(emailMessage.Contacts.Select(c => c.Id).ToArray())));
                }

                var ownersPair = mergedIndexQueueItem.Find(p => Equals(p.Key, LinqUtils.NameOf((IEmailMessage d) => d.Owners)));
                if (ownersPair.Value is ISet <IUserMailbox> ownersPairValue)
                {
                    var owners = new SerializableList <object>(ownersPairValue.Select(c => c.EmailLogin));
                    queueToIndex.Properties.Add(new KeyValuePair <string, object>(LinqUtils.NameOf((IEmailMessageFullTextSearchObject d) => d.Owners), owners));
                }
            }

            queueToIndex.DynamicProperties.AddRange((from i in mergedIndexQueueItem
                                                     select i.Value).OfType <FieldIndexListItem>());
            if (queueToIndex.Properties.Any() || queueToIndex.DynamicProperties.Any())
            {
                list.Add(queueToIndex);
            }
            return(list);
        }