Почему Outlook Interop открывает Outlook на моем ПК, даже если кто-то другой обращается к ссылке на своем ПК

#asp.net-mvc #asp.net-core #asp.net-mvc-4 #outlook

#asp.net-mvc #asp.net-core #asp.net-mvc-4 #outlook

Вопрос:

Я создал функцию для обмена отзывами с агентами, которые обрабатывали чаты от клиентов. Обратная связь должна быть отправлена по электронной почте из Outlook. Я протестировал код, и он отлично работает на моем локальном компьютере. Проблема возникает, когда кто-то другой открывает веб-приложение на своем локальном компьютере и проверяет чат. Кто-то другой, проверяющий чат на своем локальном компьютере, открывает Outlook для обмена отзывами на моем компьютере вместо открытия на своем собственном компьютере.

Может ли кто-нибудь, пожалуйста, помочь с приведенным ниже кодом и помочь мне понять, что вызывает это? И как я могу это решить?

Метод действия с обратной связью

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult ShareFeedback(Chat model)
        {
            int id = model.ChatId;

            var q1yes = "30";
            var q1no = "0";

            var q2yes = "10";
            var q2no = "0";

            var q3yes = "25";
            var q3no = "0";

            var q4yes = "35";
            var q4no = "0";

            if (!ModelState.IsValid)
            {
                return View(model);
            }
            int dtoId;

            using (Db db = new Db())
            {
                
                Chat dto = db.Chats.Where(x => x.ChatId == id).FirstOrDefault();
                dto.Feedback = model.Feedback;
                dto.FeedbackDateTime = DateTime.Now;
                

                if(model.Question1 == "Yes")
                {
                    dto.Question1 = q1yes;
                }
                else
                {
                    dto.Question1 = q1no;
                }

                if (model.Question2 == "Yes")
                {
                    dto.Question2 = q2yes;
                }
                else
                {
                    dto.Question2 = q2no;
                }

                if (model.Question3 == "Yes")
                {
                    dto.Question3 = q3yes;
                }
                else
                {
                    dto.Question3 = q3no;
                }

                if (model.Question4 == "Yes")
                {
                    dto.Question4 = q4yes;
                }
                else
                {
                    dto.Question4 = q4no;
                }


                dto.ErrorGrade = model.ErrorGrade;

                if (model.ErrorGrade == "Low")
                {
                    float total = float.Parse(dto.Question1)   float.Parse(dto.Question2)   float.Parse(dto.Question3)   float.Parse(dto.Question4);
                    dto.QualityScore = total;
                }
                if (model.ErrorGrade == "Medium")
                {
                    float total = float.Parse(dto.Question1)   float.Parse(dto.Question2)   float.Parse(dto.Question3)   float.Parse(dto.Question4);
                    float medtotal = total / 2;

                    dto.QualityScore = medtotal;
                }

                if (model.ErrorGrade == "High")
                {
                    float total = 00;
                    dto.QualityScore = total;
                }

                if(model.ErrorGrade == null)
                {
                    float total = float.Parse(dto.Question1)   float.Parse(dto.Question2)   float.Parse(dto.Question3)   float.Parse(dto.Question4);
                    dto.QualityScore = total;
                }

                var uName = User.Identity.Name;

                User userDTO = db.Users.Where(x => x.Username == uName).FirstOrDefault();
                dto.FeedbackSharedBy = userDTO.Username;
                dto.AuditorEmail = userDTO.Email;
                

                db.SaveChanges();

                dtoId = dto.ChatId;
                
            }
            using (Db db = new Db())
            {
                Chat dto = db.Chats.Find(dtoId);

                Application app = new Application();
                MailItem mailItem = app.CreateItem(OlItemType.olMailItem);

                if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
                { 
                
                mailItem.Subject = "Feedback: Chat handled on "   dto.ChatCreateDateTime   " For Customer "   dto.CustName;
                mailItem.To = dto.Email;
                mailItem.CC = "saurabhwa@cybage.com;sagargo@cybage.com;anacletem@cybage.com;riyazsh@cybage.com";
                mailItem.HTMLBody = "Hello "   dto.FirstName   "<br /><br />"   " <b>Res Time:</b> "   string.Format("<b>{0:hh\:mm\:ss}</b>", dto.ChatEndDateTime - dto.ChatStartDateTime)
                   " <b>AHT:</b> "   string.Format("<b>{0:hh\:mm\:ss}</b>", dto.ChatEndDateTime - dto.ChatCreateDateTime)   " <b>Promptness:</b> "   string.Format("<b>{0:hh\:mm\:ss}</b>", dto.ChatCreateDateTime - dto.ChatStartDateTime)   "<br/><br/>"   "Your score for this Chat audit is : "   "<b>"   dto.QualityScore   "%</b>"   "<br /><br />"   "<b>Feedback:</b>"   "<br /><br />"   dto.Feedback;
                mailItem.Importance = OlImportance.olImportanceHigh;
                mailItem.Display(false);
                }
            }

                return RedirectToAction("StartQMS");
        }
    
 

Помощь очень ценится.

Ответ №1:

Ну, конечно, ваш код выполняется на вашем сервере, а не на клиентском компьютере.

Помимо того факта, что вы используете Outlook из службы Windows (IIS), что является большим запретом, вам необходимо запустить код на стороне клиента, например, из Java-скрипта на странице, обслуживаемой вашим сервером, в клиентский браузер.

И вы не можете использовать Outlook из JS, если вы не работаете в IE, и вашему сайту доверяют. Лучшее, что вы можете сделать, это предоставить пользователю ссылку «mailto:», которая может открыть новое окно электронной почты с предварительно заполненной темой, телом и получателями.

Комментарии:

1. На самом деле, использовать Outlook вообще для этого, вероятно, не лучшая идея. 1 для ссылки mailto:.

2. Спасибо, что поделились своим ответом. Вместо этого используйте mailto, и это работает сейчас

3. Если ответ отвечает на ваш вопрос, пожалуйста, отметьте его как таковой. Спасибо.

4. Извините за задержку ответа, да, это очень помогает.