using System; using System.Collections.Generic; using System.Web.Script.Serialization; using SendGrid.Helpers.Mail; using Newtonsoft.Json; using System.Threading.Tasks; namespace Example { internal class Example { private static void Main() { // v3 Mail Helper HelloEmail().Wait(); // this will actually send an email KitchenSink().Wait(); // this will only send an email if you set SandBox Mode to false // v3 Template Example with Mail Helper TemplateWithHelper().Wait(); // v3 Template Example without Mail Helper TemplateWithoutHelper().Wait(); // v3 Web API ApiKeys().Wait(); } private static async Task TemplateWithHelper() { String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User); dynamic sg = new SendGrid.SendGridAPIClient(apiKey, "https://api.sendgrid.com"); Email from = new Email("dx@sendgrid.com"); String subject = "I'm replacing the subject tag"; Email to = new Email("elmer@sendgrid.com"); Content content = new Content("text/html", "I'm replacing the body tag"); Mail mail = new Mail(from, subject, to, content); mail.TemplateId = "13b8f94f-bcae-4ec6-b752-70d6cb59f932"; mail.Personalization[0].AddSubstitution("-name-", "Example User"); mail.Personalization[0].AddSubstitution("-city-", "Denver"); dynamic response = await sg.client.mail.send.post(requestBody: mail.Get()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.ReadLine(); } private static async Task TemplateWithoutHelper() { String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User); dynamic sg = new SendGrid.SendGridAPIClient(apiKey, "https://api.sendgrid.com"); string data = @"{ 'personalizations': [ { 'to': [ { 'email': 'elmer@sendgrid.com' } ], 'substitutions': { '-name-': 'Example User', '-city-': 'Denver' }, 'subject': 'I\'m replacing the subject tag' } ], 'from': { 'email': 'dx@sendgrid.com' }, 'content': [ { 'type': 'text/html', 'value': 'I\'m replacing the body tag' } ], 'template_id': '13b8f94f-bcae-4ec6-b752-70d6cb59f932' }"; //test @example.com Object json = JsonConvert.DeserializeObject(data); dynamic response = await sg.client.mail.send.post(requestBody: json.ToString()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.ReadLine(); } private static async Task HelloEmail() { String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User); dynamic sg = new SendGrid.SendGridAPIClient(apiKey, "https://api.sendgrid.com"); Email from = new Email("test@example.com"); String subject = "Hello World from the SendGrid CSharp Library"; Email to = new Email("test@example.com"); Content content = new Content("text/plain", "Textual content"); Mail mail = new Mail(from, subject, to, content); Email email = new Email("test2@example.com"); mail.Personalization[0].AddTo(email); dynamic response = await sg.client.mail.send.post(requestBody: mail.Get()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine(mail.Get()); Console.ReadLine(); } private static async Task KitchenSink() { String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User); dynamic sg = new SendGrid.SendGridAPIClient(apiKey, "https://api.sendgrid.com"); Mail mail = new Mail(); Email email = new Email(); email.Name = "Example User"; email.Address = "test@example.com"; mail.From = email; mail.Subject = "Hello World from the SendGrid CSharp Library"; Personalization personalization = new Personalization(); email = new Email(); email.Name = "Example User"; email.Address = "test1@example.com"; personalization.AddTo(email); email = new Email(); email.Name = "Example User"; email.Address = "test2@example.com"; personalization.AddCc(email); email = new Email(); email.Name = "Example User"; email.Address = "test3@example.com"; personalization.AddCc(email); email = new Email(); email.Name = "Example User"; email.Address = "test4@example.com"; personalization.AddBcc(email); email = new Email(); email.Name = "Example User"; email.Address = "test5@example.com"; personalization.AddBcc(email); personalization.Subject = "Thank you for signing up, %name%"; personalization.AddHeader("X-Test", "True"); personalization.AddHeader("X-Mock", "True"); personalization.AddSubstitution("%name%", "Example User"); personalization.AddSubstitution("%city%", "Denver"); personalization.AddCustomArgs("marketing", "false"); personalization.AddCustomArgs("transactional", "true"); personalization.SendAt = 1461775051; mail.AddPersonalization(personalization); personalization = new Personalization(); email = new Email(); email.Name = "Example User"; email.Address = "test1@example.com"; personalization.AddTo(email); email = new Email(); email.Name = "Example User"; email.Address = "test2@example.com"; personalization.AddCc(email); email = new Email(); email.Name = "Example User"; email.Address = "test3@example.com"; personalization.AddCc(email); email = new Email(); email.Name = "Example User"; email.Address = "test4@example.com"; personalization.AddBcc(email); email = new Email(); email.Name = "Example User"; email.Address = "test5@example.com"; personalization.AddBcc(email); personalization.Subject = "Thank you for signing up, %name%"; personalization.AddHeader("X-Test", "True"); personalization.AddHeader("X-Mock", "True"); personalization.AddSubstitution("%name%", "Example User"); personalization.AddSubstitution("%city%", "Denver"); personalization.AddCustomArgs("marketing", "false"); personalization.AddCustomArgs("transactional", "true"); personalization.SendAt = 1461775051; mail.AddPersonalization(personalization); Content content = new Content(); content.Type = "text/plain"; content.Value = "Textual content"; mail.AddContent(content); content = new Content(); content.Type = "text/html"; content.Value = "HTML content"; mail.AddContent(content); content = new Content(); content.Type = "text/calendar"; content.Value = "Party Time!!"; mail.AddContent(content); Attachment attachment = new Attachment(); attachment.Content = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12"; attachment.Type = "application/pdf"; attachment.Filename = "balance_001.pdf"; attachment.Disposition = "attachment"; attachment.ContentId = "Balance Sheet"; mail.AddAttachment(attachment); attachment = new Attachment(); attachment.Content = "BwdW"; attachment.Type = "image/png"; attachment.Filename = "banner.png"; attachment.Disposition = "inline"; attachment.ContentId = "Banner"; mail.AddAttachment(attachment); mail.TemplateId = "13b8f94f-bcae-4ec6-b752-70d6cb59f932"; mail.AddHeader("X-Day", "Monday"); mail.AddHeader("X-Month", "January"); mail.AddSection("%section1", "Substitution for Section 1 Tag"); mail.AddSection("%section2", "Substitution for Section 2 Tag"); mail.AddCategory("customer"); mail.AddCategory("vip"); mail.AddCustomArgs("campaign", "welcome"); mail.AddCustomArgs("sequence", "2"); ASM asm = new ASM(); asm.GroupId = 3; List groups_to_display = new List() { 1, 4, 5 }; asm.GroupsToDisplay = groups_to_display; mail.Asm = asm; mail.SendAt = 1461775051; mail.SetIpPoolId = "23"; // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) // mail.BatchId = "some_batch_id"; MailSettings mailSettings = new MailSettings(); BCCSettings bccSettings = new BCCSettings(); bccSettings.Enable = true; bccSettings.Email = "test@example.com"; mailSettings.BccSettings = bccSettings; BypassListManagement bypassListManagement = new BypassListManagement(); bypassListManagement.Enable = true; mailSettings.BypassListManagement = bypassListManagement; FooterSettings footerSettings = new FooterSettings(); footerSettings.Enable = true; footerSettings.Text = "Some Footer Text"; footerSettings.Html = "Some HTML Here"; mailSettings.FooterSettings = footerSettings; SandboxMode sandboxMode = new SandboxMode(); sandboxMode.Enable = true; mailSettings.SandboxMode = sandboxMode; SpamCheck spamCheck = new SpamCheck(); spamCheck.Enable = true; spamCheck.Threshold = 1; spamCheck.PostToUrl = "https://gotchya.example.com"; mailSettings.SpamCheck = spamCheck; mail.MailSettings = mailSettings; TrackingSettings trackingSettings = new TrackingSettings(); ClickTracking clickTracking = new ClickTracking(); clickTracking.Enable = true; clickTracking.EnableText = false; trackingSettings.ClickTracking = clickTracking; OpenTracking openTracking = new OpenTracking(); openTracking.Enable = true; openTracking.SubstitutionTag = "Optional tag to replace with the open image in the body of the message"; trackingSettings.OpenTracking = openTracking; SubscriptionTracking subscriptionTracking = new SubscriptionTracking(); subscriptionTracking.Enable = true; subscriptionTracking.Text = "text to insert into the text/plain portion of the message"; subscriptionTracking.Html = "HTML to insert into the text/html portion of the message"; subscriptionTracking.SubstitutionTag = "text to insert into the text/plain portion of the message"; trackingSettings.SubscriptionTracking = subscriptionTracking; Ganalytics ganalytics = new Ganalytics(); ganalytics.Enable = true; ganalytics.UtmCampaign = "some campaign"; ganalytics.UtmContent = "some content"; ganalytics.UtmMedium = "some medium"; ganalytics.UtmSource = "some source"; ganalytics.UtmTerm = "some term"; trackingSettings.Ganalytics = ganalytics; mail.TrackingSettings = trackingSettings; email = new Email(); email.Address = "test@example.com"; mail.ReplyTo = email; dynamic response = await sg.client.mail.send.post(requestBody: mail.Get()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine(mail.Get()); Console.ReadLine(); } private static async Task ApiKeys() { String apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User); dynamic sg = new SendGrid.SendGridAPIClient(apiKey, "https://api.sendgrid.com"); string queryParams = @"{ 'limit': 100 }"; dynamic response = await sg.client.api_keys.get(queryParams: queryParams); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine("\n\nPress any key to continue to POST."); Console.ReadLine(); // POST string requestBody = @"{ 'name': 'My API Key 5', 'scopes': [ 'mail.send', 'alerts.create', 'alerts.read' ] }"; Object json = JsonConvert.DeserializeObject(requestBody); response = await sg.client.api_keys.post(requestBody: json.ToString()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); JavaScriptSerializer jss = new JavaScriptSerializer(); var ds_response = jss.Deserialize>(response.Body.ReadAsStringAsync().Result); string api_key_id = ds_response["api_key_id"]; Console.WriteLine("\n\nPress any key to continue to GET single."); Console.ReadLine(); // GET Single response = await sg.client.api_keys._(api_key_id).get(); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine("\n\nPress any key to continue to PATCH."); Console.ReadLine(); // PATCH requestBody = @"{ 'name': 'A New Hope' }"; json = JsonConvert.DeserializeObject(requestBody); response = await sg.client.api_keys._(api_key_id).patch(requestBody: json.ToString()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine("\n\nPress any key to continue to PUT."); Console.ReadLine(); // PUT requestBody = @"{ 'name': 'A New Hope', 'scopes': [ ' user.profile.read', ' user.profile.update' ] }"; json = JsonConvert.DeserializeObject(requestBody); response = await sg.client.api_keys._(api_key_id).put(requestBody: json.ToString()); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Body.ReadAsStringAsync().Result); Console.WriteLine(response.Headers.ToString()); Console.WriteLine("\n\nPress any key to continue to DELETE."); Console.ReadLine(); // DELETE response = await sg.client.api_keys._(api_key_id).delete(); Console.WriteLine(response.StatusCode); Console.WriteLine(response.Headers.ToString()); Console.WriteLine("\n\nPress any key to exit."); Console.ReadLine(); } } }