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)); }
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); }