Ejemplo n.º 1
0
 private void SendFAQReply(string sFAQ, string sFaqAnswer, int?iFaqEmailId, string sToEmailAddress, string sSubject)
 {
     if ((!string.IsNullOrEmpty(sFaqAnswer)) && (iFaqEmailId != null) && (!string.IsNullOrEmpty(sToEmailAddress)))
     {
         sSubject = Regex.Replace(sSubject, @"\t|\n|\r", ""); //sSubject.Replace(@"\r\n", string.Empty);
         var faqEmail = (from fe in base.db.FAQEmails
                         where (fe.faq_email_id == iFaqEmailId.Value)
                         select fe)
                        .FirstOrDefault();
         if (faqEmail != null)
         {
             var settings = (from s in base.db.SmtpPopSettings
                             where (s.smtp_pop_id == faqEmail.smtp_pop_id)
                             select s)
                            .FirstOrDefault();
             if (settings != null)
             {
                 using (MailMessage mail = new MailMessage(faqEmail.user_name, sToEmailAddress))
                 {
                     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(faqEmail.user_name, faqEmail.use_password);
                         if (!sSubject.ToString().Trim().ToLower().StartsWith("re:"))
                         {
                             mail.Subject = string.Concat("RE: ", sSubject);
                         }
                         mail.Body = sFaqAnswer;
                         try
                         {
                             client.Send(mail);
                             AnsweredFAQ aAnswer = new AnsweredFAQ()
                             {
                                 answer_date_time = DateTime.Now
                                 ,
                                 answer_replied_with = sFaqAnswer
                                 ,
                                 faq = sFAQ
                                 ,
                                 canvas_rule_id = null
                                 ,
                                 faq_email_id = faqEmail.faq_email_id
                             };
                             this.db.AnsweredFAQs.Add(aAnswer);
                             this.db.SaveChanges();
                         }
                         catch (Exception ex)
                         {
                             //Log(string.Concat("EXCEPTION : ", ex.Message));
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo 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);
        }