public ICollection <KeyValuePair <string, string> > AsKeyValueCollection() { //check for required properties, and throw if they are missing ThrowIf.IsPropertyNull(() => To); ThrowIf.IsPropertyNull(() => From); //create kv store var kvp = new Collection <KeyValuePair <string, string> >(); //add the to values var toSb = new StringBuilder(); foreach (var to in To) { toSb.Append(to.ToFormattedString() + ","); } kvp.Add("to", toSb.ToString()); //add the from field if (From != null) { kvp.AddIfNotNullOrEmpty("from", From.ToFormattedString()); } //add the subject, test, html and campaign ID kvp.AddIfNotNullOrEmpty("subject", Subject); kvp.AddIfNotNullOrEmpty("text", Text); kvp.AddIfNotNullOrEmpty("html", Html); kvp.AddIfNotNullOrEmpty("o:campaign", CampaignId); //add date time values if (DeliveryTime != null) { kvp.Add("o:deliverytime", DeliveryTime.Value.ToUnixTime().ToString()); } //add boolean values kvp.Add("o:dkim", Dkim.AsYesNo()); kvp.Add("o:testmode", TestMode.AsYesNo()); kvp.Add("o:tracking", Tracking.AsYesNo()); kvp.Add("o:tracking-clicks", TrackingClicks.AsYesNo()); kvp.Add("o:tracking-opens", TrackingOpen.AsYesNo()); //tags if (Tags != null) { foreach (var t in Tags) { kvp.AddIfNotNullOrEmpty("o:tag", t); } } //add recipient variables if (RecipientVariables != null) { kvp.AddIfNotNullOrEmpty("recipient-variables", RecipientVariables.ToString(Formatting.None)); } //add custom headers if (CustomHeaders != null) { foreach (var h in CustomHeaders) { kvp.AddIfNotNullOrEmpty(string.Format("h:{0}", h.Key), h.Value); } } //add custom data if (CustomData != null) { foreach (var cd in CustomData) { kvp.Add(string.Format("v:{0}", cd.Key), cd.Value.ToString(Formatting.None)); } } if (CustomParameters != null) { //add custom params foreach (var p in CustomParameters) { kvp.AddIfNotNullOrEmpty(p.Key, p.Value); } } //TODO attachments and inline return(kvp); }