#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. Извините за задержку ответа, да, это очень помогает.