private void AttachFilesInFolder(DirectoryInfo folder, EmailMessage message) { foreach (var file in folder.EnumerateFiles()) { OutputVerbose(ConsoleResources.Attaching, file.Name); message.Attachments.Add(new EmailAttachment { FilePath = file.FullName, AttachmentName = file.Name }); } }
private void EmailPDF(List<IScannedImage> images) { if (images.Any()) { var emailSettings = emailSettingsContainer.EmailSettings; var invalidChars = new HashSet<char>(Path.GetInvalidFileNameChars()); var attachmentName = new string(emailSettings.AttachmentName.Where(x => !invalidChars.Contains(x)).ToArray()); if (string.IsNullOrEmpty(attachmentName)) { attachmentName = "Scan.pdf"; } if (!attachmentName.EndsWith(".pdf", StringComparison.InvariantCultureIgnoreCase)) { attachmentName += ".pdf"; } attachmentName = fileNamePlaceholders.SubstitutePlaceholders(attachmentName, DateTime.Now, false); var tempFolder = new DirectoryInfo(Path.Combine(Paths.Temp, Path.GetRandomFileName())); tempFolder.Create(); try { string targetPath = Path.Combine(tempFolder.FullName, attachmentName); if (!ExportPDF(targetPath, images, true)) { // Cancel or error return; } var message = new EmailMessage { Attachments = { new EmailAttachment { FilePath = targetPath, AttachmentName = attachmentName } } }; if (emailer.SendEmail(message)) { changeTracker.HasUnsavedChanges = false; } } finally { tempFolder.Delete(true); } } }
private void EmailScannedImages() { if (scannedImages.Count == 0) { errorOutput.DisplayError(ConsoleResources.NoPagesToEmail); return; } OutputVerbose(ConsoleResources.Emailing); var message = new EmailMessage { Subject = options.EmailSubject ?? "", BodyText = options.EmailBody, AutoSend = options.EmailAutoSend, SilentSend = options.EmailSilentSend }; message.Recipients.AddRange(EmailRecipient.FromText(EmailRecipientType.To, options.EmailTo)); message.Recipients.AddRange(EmailRecipient.FromText(EmailRecipientType.Cc, options.EmailCc)); message.Recipients.AddRange(EmailRecipient.FromText(EmailRecipientType.Bcc, options.EmailTo)); var tempFolder = new DirectoryInfo(Path.Combine(Paths.Temp, Path.GetRandomFileName())); tempFolder.Create(); try { string attachmentName = fileNamePlaceholders.SubstitutePlaceholders(options.EmailFileName, startTime, false); string targetPath = Path.Combine(tempFolder.FullName, attachmentName); if (IsPdfFile(targetPath)) { if (options.OutputPath != null && IsPdfFile(options.OutputPath)) { // The scan has already been exported to PDF, so use that file OutputVerbose(ConsoleResources.AttachingExportedPDF, attachmentName); message.Attachments.Add(new EmailAttachment { FilePath = options.OutputPath, AttachmentName = attachmentName }); } else { // The scan hasn't bee exported to PDF yet, so it needs to be exported to the temp folder OutputVerbose(ConsoleResources.ExportingPDFToAttach); if (!DoExportToPdf(targetPath, true)) { OutputVerbose(ConsoleResources.EmailNotSent); return; } // Attach the PDF file AttachFilesInFolder(tempFolder, message); } } else { // Export the images to the temp folder // Don't bother to re-use previously exported images, because the possible different formats and multiple files makes it non-trivial, // and exporting is pretty cheap anyway OutputVerbose(ConsoleResources.ExportingImagesToAttach); DoExportToImageFiles(targetPath); // Attach the image file(s) AttachFilesInFolder(tempFolder, message); } OutputVerbose(ConsoleResources.SendingEmail); if (emailer.SendEmail(message)) { OutputVerbose(ConsoleResources.EmailSent); } else { OutputVerbose(ConsoleResources.EmailNotSent); } } finally { tempFolder.Delete(true); } }