private void OpenMail(string mailPath, SaveMailToPdfRequest model) { InstantiateOutlook(); string mailExt = Path.GetExtension(mailPath); if (mailExt.Equals(".msg", StringComparison.InvariantCultureIgnoreCase)) { _logger.WriteInfo(new LogMessage(string.Concat("OpenMail -> item ", mailPath, " is .msg file. Open item with outlook directly.")), LogCategories); _outlookMail = OpenSharedItem(mailPath); return; } _logger.WriteInfo(new LogMessage(string.Concat("OpenMail -> item ", mailPath, " is not .msg file. Try build message manually.")), LogCategories); MailBuilder builder = new MailBuilder(); IMail mail = builder.CreateFromEmlFile(mailPath); _outlookMail = ConvertToMsg(mail, model); if (_outlookMail == null) { _logger.WriteError(new LogMessage(string.Concat("OpenMail -> item ", mailPath, " not open. Check if item is a correct email message.")), LogCategories); throw new Exception("Mail not open. Check if item is a correct email message."); } }
public bool SaveTo(SaveMailToPdfRequest model) { try { return(RetryingPolicyAction <bool>(() => { _logger.WriteInfo(new LogMessage(string.Concat("SaveTo -> process item ", model.SourceFilePath, ". Message type: ", Path.GetExtension(model.SourceFilePath))), LogCategories); OpenMail(model.SourceFilePath, model); string wordFileName = string.Concat(Path.GetTempFileName(), ".doc"); _logger.WriteInfo(new LogMessage("SaveTo -> save loaded message as .doc for pdf conversion"), LogCategories); _outlookMail.SaveAs(wordFileName, SaveAsType.Doc); _logger.WriteInfo(new LogMessage("SaveTo -> convert .doc to pdf"), LogCategories); byte[] pdfDocument = ConvertWordDocumentToPdf(wordFileName); File.WriteAllBytes(model.DestinationFilePath, pdfDocument); _logger.WriteInfo(new LogMessage("SaveTo -> item saved to pdf correctly"), LogCategories); return true; }, "OUTLOOK", _logger, LogCategories)); } catch (Exception ex) { _logger.WriteError(new LogMessage(string.Concat("SaveTo -> error on convert item ", model.SourceFilePath, " to pdf")), ex, LogCategories); throw; } }
private dynamic ConvertToMsg(IMail email, SaveMailToPdfRequest model) { ConversionMode noHeaders = model.ConversionMode & ConversionMode.NoHeaders; ConversionMode noBody = model.ConversionMode & ConversionMode.NoBody; dynamic msg = _outlookInstance.CreateItem(OutlookItemType.MailItem); if (noHeaders != ConversionMode.NoHeaders) { msg.Subject = email.Subject; msg.BodyFormat = MailBodyFormat.FormatHTML; msg.SentOnBehalfOfName = email.From[0].Address; IEnumerable <MailBox> toMailBoxes = email.To.SelectMany(s => s.GetMailboxes()); dynamic recipient; foreach (MailBox toMailBox in toMailBoxes) { recipient = msg.Recipients.Add(toMailBox.Address); recipient.Type = (int)MailRecipientType.To; } IEnumerable <MailBox> ccMailBoxes = email.Cc.SelectMany(s => s.GetMailboxes()); dynamic ccRecipient; foreach (MailBox ccMailBox in ccMailBoxes) { ccRecipient = msg.Recipients.Add(ccMailBox.Address); ccRecipient.Type = (int)MailRecipientType.CC; } IEnumerable <MailBox> bccMailBoxes = email.Bcc.SelectMany(s => s.GetMailboxes()); dynamic bccRecipient; foreach (MailBox bccMailBox in bccMailBoxes) { bccRecipient = msg.Recipients.Add(bccMailBox.Address); bccRecipient.Type = (int)MailRecipientType.BCC; } } if (noBody != ConversionMode.NoBody) { string bodyHtml = email.GetBodyAsHtml(); msg.HTMLBody = System.Net.WebUtility.HtmlDecode(bodyHtml); string temporaryItem; dynamic attachmentAdded; foreach (MimeData visualItem in email.Visuals.Where(x => x.Size < SizeToFilter && !ExtensionToFilterBySize.Contains(Path.GetExtension(x.FileName)))) { temporaryItem = visualItem.SaveToTemp(); attachmentAdded = msg.Attachments.Add(temporaryItem, MailAttachmentType.Embeddeditem, null, visualItem.FileNameOrDefault()); if (_visualAllowedContentTypes.Contains(visualItem.ContentType) && !string.IsNullOrEmpty(visualItem.ContentId)) { attachmentAdded.PropertyAccessor.SetProperty(SCHEMANAME_CONTENTID, visualItem.ContentId); } } ; } return(msg); }
public void TestMethod_ConvertEmlDocumentToPDF() { using (IOutlookToPdfService service = new OutlookToPdfService(_logger)) { SaveMailToPdfRequest model = new SaveMailToPdfRequest() { DestinationFilePath = Path.Combine(Directory.GetCurrentDirectory(), "VecompSoftwareTest.eml.pdf"), SourceFilePath = Path.Combine(Directory.GetCurrentDirectory(), @"TestFiles\VecompSoftwareTest.eml") }; Assert.IsTrue(service.SaveTo(model)); } }
public bool Convert(string source, string destination, ConversionMode conversionMode = ConversionMode.Default) { using (_service = new OutlookToPdfService(_logger)) { SaveMailToPdfRequest model = new SaveMailToPdfRequest() { DestinationFilePath = destination, ConversionMode = conversionMode, SourceFilePath = source }; return(_service.SaveTo(model)); } }