public async Task <IActionResult> Send(string id, [FromForm] SendEmailViewModel request, string emailAccountName = null) { try { EmailMessage emailMessage = JsonConvert.DeserializeObject <EmailMessage>(request.EmailMessageJson); Guid emailId = Guid.Parse(id); var email = repository.GetOne(emailId); var emailAttachments = new List <EmailAttachment>(); var attachments = emailAttachmentRepository.Find(null, q => q.EmailId == emailId)?.Items; if (email.Status.Equals("Draft")) { //if file doesn't exist in binary objects: add binary object entity, upload file, and add email attachment entity string hash = string.Empty; IFormFile[] filesArray = manager.CheckFiles(request.Files, emailId, hash, attachments); emailAttachments = manager.AddAttachments(filesArray, emailId, hash); if (request.Files == null || request.Files.Length == 0) { emailMessage.Attachments = emailAttachments; } else { emailMessage.Attachments = attachments; } //email account name is nullable, so it needs to be used as a query parameter instead of in the put url //if no email account is chosen, the default organization account will be used await manager.SendEmailAsync(emailMessage, emailAccountName, id, "Outgoing"); email = repository.Find(null, q => q.Id == emailId)?.Items?.FirstOrDefault(); EmailViewModel emailViewModel = manager.GetEmailViewModel(email, attachments); if (attachments.Count == 0 || attachments == null) { emailViewModel.Attachments = emailAttachments; } return(Ok(emailViewModel)); } else { ModelState.AddModelError("Send email", "Email was not able to be sent. Email is not a draft."); return(BadRequest(ModelState)); } } catch (Exception ex) { return(ex.GetActionResult()); } }
public void DeleteAll(string emailId, string driveName) { var attachments = _emailAttachmentRepository.Find(null, q => q.EmailId == Guid.Parse(emailId))?.Items; if (attachments.Count != 0) { var fileView = new FileFolderViewModel(); foreach (var attachment in attachments) { fileView = _fileManager.DeleteFileFolder(attachment.FileId.ToString(), driveName); _emailAttachmentRepository.SoftDelete(attachment.Id.Value); } var folder = _fileManager.GetFileFolder(fileView.ParentId.ToString(), driveName); if (!folder.HasChild.Value) { _fileManager.DeleteFileFolder(folder.Id.ToString(), driveName); } else { _fileManager.AddBytesToFoldersAndDrive(new List <FileFolderViewModel> { fileView }); } } else { throw new EntityDoesNotExistException("No attachments found to delete"); } }
public void DeleteAll(string emailId, string driveId) { var attachments = _emailAttachmentRepository.Find(null, q => q.EmailId == Guid.Parse(emailId))?.Items; if (attachments.Count != 0) { if (string.IsNullOrEmpty(driveId)) { var fileToDelete = _storageFileRepository.GetOne(attachments[0].FileId.Value); driveId = fileToDelete.StorageDriveId.ToString(); } var fileView = new FileFolderViewModel(); foreach (var attachment in attachments) { fileView = _fileManager.DeleteFileFolder(attachment.FileId.ToString(), driveId, "Files"); _emailAttachmentRepository.SoftDelete(attachment.Id.Value); } var folder = _fileManager.GetFileFolder(fileView.ParentId.ToString(), driveId, "Folders"); if (!folder.HasChild.Value) { _fileManager.DeleteFileFolder(folder.Id.ToString(), driveId, "Folders"); } else { _fileManager.RemoveBytesFromFoldersAndDrive(new List <FileFolderViewModel> { fileView }); } } else { throw new EntityDoesNotExistException("No attachments found to delete"); } }