Exemplo n.º 1
0
        public ActionResult UpdateUnansweredFAQ(UpdateUnansweredFAQModel model)
        {
            if (model != null)
            {
                UnAnsweredFAQ faq = (from f in base.db.UnAnsweredFAQs
                                     where (f.unanswered_faq_id == model.unanswered_faq_id)
                                     select f)
                                    .FirstOrDefault();
                if (faq != null)
                {
                    faq.faq_answer           = model.faq_answer;
                    base.db.Entry(faq).State = System.Data.Entity.EntityState.Modified;
                    base.db.SaveChanges();

                    Task.Factory.StartNew(() =>
                    {
                        SendFAQReply(faq.faq, model.faq_answer, faq.faq_email_id, faq.to_email_address, faq.faq_email_subject);
                    });

                    return(base.SuccessMessage(string.Empty));
                }
            }
            return(base.NoSuccessMessage(Constants.ERROR_IN_EXECUTION));
        }
Exemplo n.º 2
0
        private async Task <object> SendAutoReply(FAQEmail aEmail)
        {
            if (aEmail != null)
            {
                EmailDownloader aDownloader = new EmailDownloader(aEmail.faq_email_id);
                aDownloader.FaqLogger = this.FaqLogger;
                List <Message> UnreadEmails = await aDownloader.UnreadEmails();

                if (UnreadEmails != null && UnreadEmails.Count > 0)
                {
                    StringBuilder builder = null;
                    foreach (Message aUnreadEmail in UnreadEmails)
                    {
                        FAQEmailsDownload newEmail = new FAQEmailsDownload()
                        {
                            download_date  = DateTime.Now
                            , email_uid    = aUnreadEmail.Headers.MessageId
                            , faq_email_id = aEmail.faq_email_id
                        };
                        this.db.FAQEmailsDownloads.Add(newEmail);
                        this.db.SaveChanges();

                        builder = new StringBuilder();
                        OpenPop.Mime.MessagePart plainText = aUnreadEmail.FindFirstPlainTextVersion();
                        if (plainText != null)
                        {
                            // We found some plaintext!
                            builder.Append(plainText.GetBodyAsText());
                        }
                        else
                        {
                            // Might include a part holding html instead
                            OpenPop.Mime.MessagePart html = aUnreadEmail.FindFirstHtmlVersion();
                            if (html != null)
                            {
                                // We found some html!
                                builder.Append(html.GetBodyAsText());
                            }
                        }
                        if (builder != null && !string.IsNullOrEmpty(builder.ToString()))
                        {
                            CanvasRespondRule answerFound = AnswerFinder.FindAnswer(AutoResponderRuleTypes.FAQs, builder.ToString());
                            if (answerFound != null)
                            {
                                SmtpPopSetting settings = (from s in db.SmtpPopSettings
                                                           where (s.smtp_pop_id == aEmail.smtp_pop_id)
                                                           select s
                                                           ).FirstOrDefault();
                                if (settings != null)
                                {
                                    string sEmailReceivedFrom = aUnreadEmail.Headers.From.MailAddress.Address;
                                    using (MailMessage mail = new MailMessage(aEmail.user_name, sEmailReceivedFrom))
                                    {
                                        using (SmtpClient client = new SmtpClient(settings.smtp_server, settings.smpt_port))
                                        {
                                            client.EnableSsl             = settings.smtp_use_ssl;
                                            client.DeliveryMethod        = SmtpDeliveryMethod.Network;
                                            client.UseDefaultCredentials = false;
                                            client.Credentials           = new NetworkCredential(aEmail.user_name, aEmail.use_password);
                                            if (!builder.ToString().Trim().ToLower().StartsWith("re:"))
                                            {
                                                mail.Subject = string.Concat("RE: ", aUnreadEmail.Headers.Subject);
                                            }
                                            mail.Body = answerFound.CanvasAnswer;
                                            try
                                            {
                                                //client.SendCompleted += (s, e) =>
                                                //{

                                                //};
                                                //client.SendAsync(mail, null);
                                                client.Send(mail);
                                                Log(string.Format("Question '{0}' replied with answer '{1}' to email account '{2}'"
                                                                  , builder.ToString(), answerFound.CanvasAnswer, sEmailReceivedFrom));
                                                AnsweredFAQ aAnswer = new AnsweredFAQ()
                                                {
                                                    answer_date_time = DateTime.Now
                                                    ,
                                                    answer_replied_with = answerFound.CanvasAnswer
                                                    ,
                                                    faq = builder.ToString()
                                                    ,
                                                    canvas_rule_id = answerFound.CanvasRuleId
                                                    ,
                                                    faq_email_id = aEmail.faq_email_id
                                                };
                                                this.db.AnsweredFAQs.Add(aAnswer);
                                                this.db.SaveChanges();
                                            }
                                            catch (Exception ex)
                                            {
                                                Log(string.Concat("EXCEPTION : ", ex.Message));
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                Log(string.Format("No answer was found against FAQ '{0}'", builder.ToString()));
                                UnAnsweredFAQ unAnswered = new UnAnsweredFAQ()
                                {
                                    faq                 = builder.ToString()
                                    , faq_email_id      = aEmail.faq_email_id
                                    , to_email_address  = aUnreadEmail.Headers.From.MailAddress.Address
                                    , faq_email_subject = aUnreadEmail.Headers.Subject
                                };
                                db.UnAnsweredFAQs.Add(unAnswered);
                                db.SaveChanges();
                            }
                        }
                    }
                }
            }
            return(null);
        }