为什么 Outlook Interop 在我的电脑上打开 outlook,即使其他人正在访问他们电脑上的 link

Why is Outlook Interop opens outlook on my Pc even though some one else is accessing the link on their PC

我创建了一个功能来与处理客户聊天的代理分享反馈。 反馈需要通过电子邮件从 outlook 共享。我测试了代码,它在我的本地 PC 上运行良好。 当其他人在他们的本地 PC 上打开 WebApp 并审核聊天时,问题就来了。 在他们本地 PC 上审核聊天的其他人打开 Outlook 以在我的 PC 上共享反馈,而不是在他们自己的 PC 上打开。

有人可以帮忙编写下面的代码,帮助我理解是什么导致了这种情况发生吗? 而且,我该如何解决这个问题?

反馈操作方法

[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");
        }
    

非常感谢您的帮助。

当然,您的代码是在您的 服务器 上执行的,而不是在 客户端 机器上执行的。

除了您从 Windows 服务 (IIS) 使用 Outlook 这一事实之外,这是一个很大的禁忌,您还需要 运行 客户端的代码,例如从服务器提供的页面中的 Java 脚本到客户端浏览器。

并且您不能从 JS 使用 Outlook,除非您在 IE 中 运行ning,并且您的站点是受信任的。您能做的最好的事情就是为用户提供一个“mailto:”link,它可以弹出一封新电子邮件 window,其中包含预先填充的主题、正文和收件人。