public EmailPackage Deserialize(string packageContents)
        {
            XDocument xdoc = XDocument.Parse(packageContents, LoadOptions.None);
            var serialisedPackage = xdoc.Element(XName.Get("emailPackage", Constants.XmlNamespace));

            if (serialisedPackage == null)
            {
                throw new InvalidOperationException("Could not find emailPackageElement in package contents");
            }

            var recipientsElement = serialisedPackage.Element(XName.Get("recipients", Constants.XmlNamespace));
            var attachmentsElement = serialisedPackage.Element(XName.Get("attachments", Constants.XmlNamespace));

            if (recipientsElement == null || !recipientsElement.HasElements)
            {
                throw new InvalidOperationException("No recipients specified for email");
            }

            var package = new EmailPackage();
            package.From = serialisedPackage.ValueOrEmptyString("from", Constants.XmlNamespace);
            package.Subject = serialisedPackage.ValueOrEmptyString("subject", Constants.XmlNamespace);
            package.Html = serialisedPackage.ValueOrEmptyString("html", Constants.XmlNamespace);
            package.Text = serialisedPackage.ValueOrEmptyString("text", Constants.XmlNamespace);
            package.To = new RecipientList(from t in recipientsElement
                                               .Elements(XName.Get("recipient", Constants.XmlNamespace))
                                           select t.Value);
            if (attachmentsElement != null)
            {
                package.Attachments = new AttachmentList(from a in attachmentsElement.Elements(XName.Get("attachment", Constants.XmlNamespace))
                                           select a.Value);
            }

            return package;
        }
        public void EmailPackageSerialiser_Serialisation_CanSerialiseAnEmailPackage()
        {
            EmailPackageSerialiser serialiser = new EmailPackageSerialiser();
            EmailPackage           package    = Helpers.SamplePackage();
            string serialised  = serialiser.Serialise(package);
            string jgnamespace = "http://www.tanash.net/email/package";

            XDocument doc = XDocument.Parse(serialised);
            var       serialisedPackage = doc.Element(XName.Get("emailPackage", jgnamespace));

            Assert.That(serialisedPackage.Element(XName.Get("from", jgnamespace)).Value, Is.EqualTo(package.From));
            Assert.That(serialisedPackage.Element(XName.Get("subject", jgnamespace)).Value, Is.EqualTo(package.Subject));
            Assert.That(serialisedPackage.Element(XName.Get("html", jgnamespace)).Value, Is.EqualTo(package.Html));
            Assert.That(serialisedPackage.Element(XName.Get("text", jgnamespace)).Value, Is.EqualTo(package.Text));
            Assert.That(serialisedPackage
                        .Element(XName.Get("recipients", jgnamespace))
                        .Elements(XName.Get("address", jgnamespace)).ToList(),
                        Has.Count.EqualTo(1));
            Assert.That(serialisedPackage
                        .Element(XName.Get("attachments", jgnamespace))
                        .Elements(XName.Get("attachment", jgnamespace)).ToList(),
                        Has.Count.EqualTo(1));
        }
Example #3
0
        public static EmailPackage getFeedAsEmailPackage(Feed <Document> feed)
        {
            RestController client = feed.Client;

            if (client == null)
            {
                throw new Exception("CLIENTNULLEXCEPTION: the feed passed does not have its client set, no operations are possible without this.");
            }
            long             tStart  = DateTime.Now.Ticks;
            SingleGetOptions options = new SingleGetOptions {
                Links = true
            };
            EmailPackage             emailPkg   = null;;
            List <Entry <Document> > entries    = feed.Entries;
            Entry <Document>         emailEntry = (from k in entries where (k.Title != null && k.Title.Equals("EMAIL")) select k).FirstOrDefault();
            var attachmentEntry = (from a in entries where (a.Title != null && a.Title.Equals("ATTACHMENT")) select a.Content);

            if (emailEntry == null)
            {
                return(null);
            }

            string   objectId = emailEntry.Content.GetPropertyValue("r_object_id").ToString();
            Document document = null;

            //todo
            //client.getDocumentByQualification(
            //String.Format("dm_document where r_object_id = '{0}'", objectId),
            //new FeedGetOptions { Inline = true, Links = true });

            emailPkg = new EmailPackage(document, feed.Title.StartsWith("DUPLICATE"));
            if (emailPkg.IsDuplicate)
            {
                if (feed.Title.Equals("DUPLICATE"))
                {
                    feed.Client.Logger.WriteToLog(Rest.Utility.LogLevel.WARNING, "EmailImport", "API on the server is out of date"
                                                  + "and will not search for duplicates in the System, only Folder.", new Exception("SERVERAPIOUTDATED"));
                }
                // Determine Duplicate Type and fill it in
                if (feed.Title.Equals("DUPLICATE-FOLDER"))
                {
                    emailPkg.DuplicateType = DuplicateType.FOLDER;
                }
                else
                {
                    emailPkg.DuplicateType = DuplicateType.SYSTEM;
                }
            }

            //string extension = (from k in map where k.Value.Equals(format) select k.Key).FirstOrDefault();

            foreach (Document attachment in attachmentEntry)
            {
                string   attachmentId = attachment.GetPropertyValue("r_object_id").ToString();
                Document attDocument  = null;
                // todo
                // client.GetObjectById<Document>(attachmentId, options);
                emailPkg.Attachments.Add(attDocument);
            }
            client.Logger.WriteToLog(Rest.Utility.LogLevel.DEBUG, "EmailFeedToPackage",
                                     "Conversion took " + ((DateTime.Now.Ticks - tStart) / TimeSpan.TicksPerMillisecond) + "ms", "TIMING");
            return(emailPkg);
        }