public ActionResult SendEmail(MailSentViewModel sendInfo, Int64 mailAccountId = 0) { try { if (sendInfo.ToAddress == null) { throw new InvalidRecipientsException("No se escribieron destinatarios"); } MailAccount mailAccount = this.GetMailAccount(mailAccountId); List <ExtraFile> uploadedFiles = new List <ExtraFile>(); if (sendInfo.AttachmentsIds != null && sendInfo.AttachmentsIds.Count > 0 && Session[AsyncMailsController.FILES] != null && ((List <ExtraFile>)Session[AsyncMailsController.FILES]).Count > 0) { foreach (String attachmentId in sendInfo.AttachmentsIds) { ExtraFile file = ((List <ExtraFile>)Session[AsyncMailsController.FILES]).First(x => x.Id == attachmentId); try { using (FileStream fileStream = System.IO.File.Open(file.Path, FileMode.Open, FileAccess.Read)) fileStream.Read(file.Content, 0, (int)file.Size); uploadedFiles.Add(file); } catch (Exception exc) { if (!(exc is UnauthorizedAccessException) && !(exc is DirectoryNotFoundException)) { throw; } } } } mailAccount.SendMail(sendInfo.ToAddress, sendInfo.Body, sendInfo.Subject, uploadedFiles); Session.Remove(AsyncMailsController.FILES); this.ClearTempDirectory(); return(Json(new { success = true, address = sendInfo.ToAddress }, JsonRequestBehavior.AllowGet)); } catch (InvalidRecipientsException exc) { return(Json(new { success = false, message = "No se pudo enviar el email porque alguna de las direcciones de los destinatarios es inexistente. Por favor corríjalos e intentelo de nuevo.", address = sendInfo.ToAddress }, JsonRequestBehavior.AllowGet)); } catch (SmtpException exc) { Log.LogException(exc, "Parametros del mail a enviar: subjectMail(" + sendInfo.Subject + "), addressMail(" + sendInfo.ToAddress + ")."); return(Json(new { success = false, message = "Actualmente tenemos problemas para enviar el email, por favor intételo de nuevo más tarde", address = sendInfo.ToAddress }, JsonRequestBehavior.AllowGet)); } catch (GlimpseException exc) { return(Json(new { success = false, message = exc.GlimpseMessage, address = exc.GlimpseMessage }, JsonRequestBehavior.AllowGet)); } catch (Exception exc) { Session.Remove(AsyncMailsController.FILES); Log.LogException(exc, "Parametros de la llamada: subjectMail(" + sendInfo.Subject + "), addressMail(" + sendInfo.ToAddress + ")."); return(Json(new { success = false, message = "Actualmente tenemos problemas para enviar el email, por favor inténtelo de nuevo más tarde", address = sendInfo.ToAddress }, JsonRequestBehavior.AllowGet)); } }