示例#1
0
        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.");
            }
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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));
            }
        }
示例#5
0
 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));
     }
 }