예제 #1
0
        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));
            }
        }